日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

临界表储存图的数据(思路+详解+图示)

發(fā)布時間:2023/12/4 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 临界表储存图的数据(思路+详解+图示) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一:前言

當(dāng)我們考慮用鄰接表儲存數(shù)據(jù)的時候,一定會拿鄰接矩陣和其進(jìn)行比較。鄰接矩陣在儲存數(shù)量較小的數(shù)據(jù)是耗費的內(nèi)存是要高于鄰接表的。那么我們在做題的時候如果出現(xiàn)內(nèi)存超限,那就要注意了,可以考慮換用鄰接表來儲存數(shù)據(jù)了

二:相關(guān)描述

1.問題:利用鄰接表來儲存有向圖的數(shù)據(jù)

2.測試數(shù)據(jù):
輸入: 5 8
1 2 5
1 3 8
1 5 3
2 5 6
2 3 2
3 4 10
3 5 4
4 5 11

輸出:為每個頂點和其相連邊的頂點以及權(quán)值
1 5 3 3 8 2 5
2 3 2 5 6
3 5 4 4 10
4 5 11
5
輸出的解釋說明:1 5 3 3 8 2 5 頂點1和5相連權(quán)值為3,頂點1和3相連權(quán)值為8,頂點1和2相連權(quán)值為5

3.分析如何建立鄰接表使其輸出上述數(shù)據(jù)
1>:首先指出,我們采取用數(shù)組模擬指針來建立鏈表,采用結(jié)構(gòu)體數(shù)組來存儲每個結(jié)點的信息
2>:結(jié)構(gòu)體數(shù)組中的值為{頂點下標(biāo),邊的權(quán)值,指向下一個結(jié)點的下標(biāo)}
注意指向下一個結(jié)點的下標(biāo),因為我們采用的是數(shù)組來模擬指針,所以我們的head 和 next
都是記錄結(jié)構(gòu)體的數(shù)組下標(biāo),而head[i] 中的 i才是真正的頂點下標(biāo)
3>:模擬指針為空的狀況我們采用 當(dāng) next的值為0是表示為空
4>:建立鏈表和遍歷鏈表請看代碼

4.圖示鄰接表


5.示例當(dāng)中的鄰接表和

代碼中鏈表插入的過程

三:上碼

/**1.問題:利用鄰接表來儲存有向圖的數(shù)據(jù)2.測試數(shù)據(jù): 輸入: 5 81 2 51 3 81 5 32 5 62 3 23 4 103 5 44 5 11輸出:為每個頂點和其相連邊的頂點以及權(quán)值1 5 3 3 8 2 5 2 3 2 5 63 5 4 4 104 5 115 輸出的解釋說明:1 5 3 3 8 2 5 頂點1和5相連權(quán)值為3,頂點1和3相連權(quán)值為8,頂點1和2相連權(quán)值為5 3.分析如何建立鄰接表使其輸出上述數(shù)據(jù)1>:首先指出,我們采取用數(shù)組模擬指針來建立鏈表,采用結(jié)構(gòu)體數(shù)組來存儲每個結(jié)點的信息2>:結(jié)構(gòu)體數(shù)組中的值為{頂點下標(biāo),邊的權(quán)值,指向下一個結(jié)點的下標(biāo)} 注意指向下一個結(jié)點的下標(biāo),因為我們采用的是數(shù)組來模擬指針,所以我們的head 和 next都是記錄結(jié)構(gòu)體的數(shù)組下標(biāo),而head[i] 中的 i才是真正的頂點下標(biāo)3>:模擬指針為空的狀況我們采用 當(dāng) next的值為0是表示為空4>:建立鏈表和遍歷鏈表請看代碼 **/#include<bits/stdc++.h> using namespace std; #define max 20000struct Node{int to;//到達(dá)某個點 int val;//邊的權(quán)值 int next;//指向下一個結(jié)點下標(biāo) } node[max];int head[max] = {0},n,m,num = 0;//head為記錄結(jié)構(gòu)體下標(biāo),num為結(jié)構(gòu)體的下標(biāo) //建立鏈表 這個過程類似于頭插法,每次插入都插入到上一個結(jié)點的前面 void add(int from,int to,int val){num++; node[num].to = to; node[num].val = val;node[num].next = head[from];//指向下一個結(jié)點的下標(biāo) head[from] = num;//記錄結(jié)構(gòu)體數(shù)組的下標(biāo),下次插入的時候指向其 } int main(){cin >> n >> m;for(int i = 0; i < m; i++){int from,to,val;cin >> from >> to >> val;add(from,to,val);//add(to,from,val); 這里表示的是無向圖中鄰接表 } //遍歷鄰接表for(int i = 1; i <= n; i++){//因為頂點是從1開始的cout << i << ' ';for(int j = head[i]; j != 0; j = node[j].next){ //遍歷頂點為i的鏈表 直到結(jié)構(gòu)體的下標(biāo)為0 cout << node[j].to << ' '<< node[j].val << ' '; } cout << endl;} } //5 8 //1 2 5 //1 3 8 //1 5 3 //2 5 6 //2 3 2 //3 4 10 //3 5 4 //4 5 11

四:書上的例子創(chuàng)建鄰接表(有億點麻煩)

//鄰接表是圖的一種鏈?zhǔn)酱鎯Y(jié)構(gòu),對圖的每個頂點建立一個單鏈表,單鏈表第一個結(jié)點存放頂點信息,其余存放有關(guān)邊信息。 //鄰接表由表頭結(jié)點表和邊表組成。 // (01) LGraph是鄰接表對應(yīng)的結(jié)構(gòu)體。 // vexnum是頂點數(shù),edgnum是邊數(shù);vexs則是保存頂點信息的一維數(shù)組。// (02) VNode是鄰接表頂點對應(yīng)的結(jié)構(gòu)體。 // data是頂點所包含的數(shù)據(jù),而first_edge是該頂點所包含鏈表的表頭指針。// (03) ENode是鄰接表頂點所包含的鏈表的節(jié)點對應(yīng)的結(jié)構(gòu)體。 // ivex是該節(jié)點所對應(yīng)的頂點在vexs中的索引,而next_edge是指向下一個節(jié)點的 #include<stdio.h> #include<stdlib.h> #define Max 100 typedef struct Graph* ptrGraph; typedef struct Edgenode* ptrEdgenode; typedef struct Edgenode{//邊結(jié)點int adjvex;//邊結(jié)點位置下標(biāo)struct Edgenode* next; }edgenode; typedef struct Vnode{//頂點int Data;struct Edgenode* firstarc; }vnode; typedef struct Graph{struct Vnode AdjList[Max];int Nv;int Ne; }graph; int locateVex(ptrGraph G,int v){//根據(jù)v點信息,找到相應(yīng)坐標(biāo)int i;for(i=0;i<G->Nv;i++){if(G->AdjList[i].Data==v){return i;}}return -1; } int CreatGraph(ptrGraph G){int i,j;int V1,V2,K1,K2;ptrEdgenode p1,p2;scanf("%d%d",&G->Nv,G->Ne);//輸入頭結(jié)點(即頂點的數(shù)據(jù))for(i=0;i<G->Nv;i++){scanf("%d",&G->AdjList[i].Data);G->AdjList[i].firstarc=NULL;}//輸入邊的兩個結(jié)點for(j=0;j<G->Ne;j++){scanf("%d%d",&V1,&V2);K1=locateVex(G,V1);K1=locateVex(G,V2);p1=(ptrEdgenode)malloc(sizeof(struct Edgenode));p1->adjvex=K1;p1->next=G->AdjList[K2].firstarc;//鏈表前插法G->AdjList[K2].firstarc=p1;p2=(ptrEdgenode)malloc(sizeof(struct Edgenode));p2->adjvex=K2;p2->next=G->AdjList[K1].firstarc;G->AdjList[K1].firstarc=p2;}return 0;} void output_AL(ptrGraph G) //輸出 {int i;for( i=0;i<G->Nv;i++){printf("頂點%d",G->AdjList[i].Data);ptrEdgenode p=G->AdjList[i].firstarc;while(p!=NULL){printf("->%d",p->adjvex); //輸出下標(biāo)//printf("->%c",G.AdjList[p->adjvex].data); //輸出頂點元素p=p->next;}printf("\n");} }int main() {ptrGraph G;CreatGraph(G);// output_AL(G);return 0; } 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的临界表储存图的数据(思路+详解+图示)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 丰满孕妇性春猛交xx大陆 | 精品中文字幕一区二区 | 色视频在线观看 | 一级黄色av片 | 爱爱精品 | 二区三区视频 | 国产在线区 | 亚洲无在线观看 | 中文字幕乱妇无码av在线 | 中文字幕亚洲欧美日韩 | 精品自拍偷拍 | 杨幂一区二区国产精品 | 欧美三日本三级少妇三级99观看视频 | 日本久久激情 | 香蕉成人av | 日韩免费视频一区二区视频在线观看 | 桃色网址 | av中文资源 | 亚洲视频你懂的 | 日本一二三区在线 | 国产aⅴ | 日本性高潮视频 | 亚洲成人精品av | 亚洲熟女乱色一区二区三区 | 四虎一区二区三区 | mdyd—856冲田杏梨在线 | 一本到在线 | 成人福利视频在线观看 | 琪琪电影午夜理论片八戒八戒 | 羞辱极度绿帽vk | 久久久久久伦理 | 国产黄大片 | 九色91popny蝌蚪新疆 | 女人18毛片一区二区三区 | 深夜国产在线 | 成人免费高清在线观看 | 乱淫av | 欧美粗大猛烈 | 欧美女优在线 | 性五月天| 欧美网站在线观看 | 尹人综合在线 | 亚洲欧洲国产综合 | 国产欧美一区二区三区在线看蜜臀 | 琪琪色视频 | 精品91久久久 | 精品123区| 国产精品视频一区二区三区不卡 | 亚洲国产成人va在线观看天堂 | 凹凸视频一区二区 | 亚洲三级在线 | 欧美丰满一区二区免费视频 | 人人爽夜夜爽 | 国产一区二区三区精品愉拍 | 国产乱码精品一区二三区蜜臂 | 天天操天天插天天干 | 男人操女人动态图 | 深夜av| 九九热在线视频 | 夜夜福利 | 精品国产二区三区 | 亚洲精品ww | 淫语视频 | 影音先锋亚洲成aⅴ人在 | 黄色片18 | 日韩一区二区三区高清 | 国产51视频 | 成熟妇人a片免费看网站 | 色呦呦免费| 日韩国产传媒 | 91.xxx.高清在线 | 岛国av大片 | 日韩黄色在线 | 亚洲国产一区二区在线观看 | 男生捅女生肌肌 | 黄色大片av | 日本免费视频 | 国产毛片91 | 熟女一区二区三区视频 | 人妖天堂狠狠ts人妖天堂狠狠 | 久久激情免费视频 | 亚洲av成人精品午夜一区二区 | 国产精品性 | 亚洲av电影天堂男人的天堂 | 69av在线播放| 精品视频一区二区三区 | 欧美日韩激情一区二区 | 中文字幕淫 | jzzijzzij亚洲成熟少妇在线观看 久久久精品人妻一区二区三区 | 麻豆视频一区二区 | 午夜美女视频 | 日韩网站免费观看高清 | 蜜臀99久久精品久久久久久软件 | 337p日本欧洲亚洲大胆精筑 | 中文字幕av第一页 | 999一区二区三区 | 四虎影院一区二区 | 日本在线观看 | 毛片aa|