資料結構之圖論之鄰接表
阿新 • • 發佈:2018-12-09
還是插入一段程式碼來解釋鄰接表的建立過程。
//自己建立一個鄰接表 //邊表結點 typedef struct { int adjvex;//該邊的頭結點 int weight;//權值 EdgeNode *next;//該邊尾結點的下一條邊 }EdgeNode; //頂點結點 typedef struct { int data;//頂點結點的資料 EdgeNode *first;//頂點結點的邊表頭指標 }VertexNode,Adjlist[10000]; //圖結構體 typedef struct { Adjlist adjlist;//頂點陣列 int NumVertex,NumEdge;//頂點個數和邊的個數 }GraAdj; void create(GraAdj &g)// &符更加方便 { int m,n; EdgeNode *e,*p; cin>>g.NumVertex>>g.NumEdge;//輸入邊的數量和結點的數量 //建立頂點結點陣列 for(int i-0;i<g.NumVertex;i++){ cin>>g.adjlist[i].data; g.adjlist[i].first=NULL; } //建立邊表 for(int i=0;i<g.NumEdge;i++){ cin>>m>>n;//邊的尾 ,頭指標 //建立邊結點 e=(EdgeNode*)malloc(sizeof(EdgeNode)); e.adjvex=n; e.next=NULL; cin>>e.weight; //頭插法建立邊表 if(g.adjlist[m].first==NULL){ p=g.adjlist[m].first=e; }else { p=p->next=e; } } }
心路歷程:以一個數組存放所有頂點。
每個頂點有一個連結串列,連結串列裡結點存放的是:和該頂點有關的所有邊的權值,該邊的頭結點編號
將以上封裝在一個結構體裡面!