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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

图的建立-邻接表表示(C语言)

發(fā)布時(shí)間:2023/12/4 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图的建立-邻接表表示(C语言) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

代碼如下:

/* 圖的鄰接表表示法 */#define MaxVertexNum 100 /* 最大頂點(diǎn)數(shù)設(shè)為100 */ typedef int Vertex; /* 用頂點(diǎn)下標(biāo)表示頂點(diǎn),為整型 */ typedef int WeightType; /* 邊的權(quán)值設(shè)為整型 */ typedef char DataType; /* 頂點(diǎn)存儲的數(shù)據(jù)類型設(shè)為字符型 *//* 邊的定義 */ typedef struct ENode *PtrToENode; struct ENode{Vertex V1, V2; /* 有向邊<V1, V2> */WeightType Weight; /* 權(quán)重 */ }; typedef PtrToENode Edge;/* 鄰接點(diǎn)的定義 */ typedef struct AdjVNode *PtrToAdjVNode; struct AdjVNode{Vertex AdjV; /* 鄰接點(diǎn)下標(biāo) */WeightType Weight; /* 邊權(quán)重 */PtrToAdjVNode Next; /* 指向下一個鄰接點(diǎn)的指針 */ };/* 頂點(diǎn)表頭結(jié)點(diǎn)的定義 */ typedef struct Vnode{PtrToAdjVNode FirstEdge;/* 邊表頭指針 */DataType Data; /* 存頂點(diǎn)的數(shù)據(jù) *//* 注意:很多情況下,頂點(diǎn)無數(shù)據(jù),此時(shí)Data可以不用出現(xiàn) */ } AdjList[MaxVertexNum]; /* AdjList是鄰接表類型 *//* 圖結(jié)點(diǎn)的定義 */ typedef struct GNode *PtrToGNode; struct GNode{ int Nv; /* 頂點(diǎn)數(shù) */int Ne; /* 邊數(shù) */AdjList G; /* 鄰接表 */ }; typedef PtrToGNode LGraph; /* 以鄰接表方式存儲的圖類型 */LGraph CreateGraph( int VertexNum ) { /* 初始化一個有VertexNum個頂點(diǎn)但沒有邊的圖 */Vertex V;LGraph Graph;Graph = (LGraph)malloc( sizeof(struct GNode) ); /* 建立圖 */Graph->Nv = VertexNum;Graph->Ne = 0;/* 初始化鄰接表頭指針 *//* 注意:這里默認(rèn)頂點(diǎn)編號從0開始,到(Graph->Nv - 1) */for (V=0; V<Graph->Nv; V++)Graph->G[V].FirstEdge = NULL;return Graph; }void InsertEdge( LGraph Graph, Edge E ) {PtrToAdjVNode NewNode;/* 插入邊 <V1, V2> *//* 為V2建立新的鄰接點(diǎn) */NewNode = (PtrToAdjVNode)malloc(sizeof(struct AdjVNode));NewNode->AdjV = E->V2;NewNode->Weight = E->Weight;/* 將V2插入V1的表頭 */NewNode->Next = Graph->G[E->V1].FirstEdge;Graph->G[E->V1].FirstEdge = NewNode;/* 若是無向圖,還要插入邊 <V2, V1> *//* 為V1建立新的鄰接點(diǎn) */NewNode = (PtrToAdjVNode)malloc(sizeof(struct AdjVNode));NewNode->AdjV = E->V1;NewNode->Weight = E->Weight;/* 將V1插入V2的表頭 */NewNode->Next = Graph->G[E->V2].FirstEdge;Graph->G[E->V2].FirstEdge = NewNode; }LGraph BuildGraph() {LGraph Graph;Edge E;Vertex V;int Nv, i;scanf("%d", &Nv); /* 讀入頂點(diǎn)個數(shù) */Graph = CreateGraph(Nv); /* 初始化有Nv個頂點(diǎn)但沒有邊的圖 */ scanf("%d", &(Graph->Ne)); /* 讀入邊數(shù) */if ( Graph->Ne != 0 ) { /* 如果有邊 */ E = (Edge)malloc( sizeof(struct ENode) ); /* 建立邊結(jié)點(diǎn) */ /* 讀入邊,格式為"起點(diǎn) 終點(diǎn) 權(quán)重",插入鄰接矩陣 */for (i=0; i<Graph->Ne; i++) {scanf("%d %d %d", &E->V1, &E->V2, &E->Weight); /* 注意:如果權(quán)重不是整型,Weight的讀入格式要改 */InsertEdge( Graph, E );}} /* 如果頂點(diǎn)有數(shù)據(jù)的話,讀入數(shù)據(jù) */for (V=0; V<Graph->Nv; V++) scanf(" %c", &(Graph->G[V].Data));return Graph; }

總結(jié)

以上是生活随笔為你收集整理的图的建立-邻接表表示(C语言)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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