C++語言實現-鄰接表
阿新 • • 發佈:2018-11-14
圖的鄰接表實現
鄰接表是圖的一種鏈式儲存結構。主要是應對於鄰接矩陣在頂點多邊少的時候,浪費空間的問題。它的方法就是宣告兩個結構。如下圖所示:
先來看看虛擬碼:
typedef char Vertextype;
//表結點結構
struct ArcNode {
int adjvex; //某條邊指向的那個頂點的位置(一般是陣列的下標)。
ArcNode * nextarc; //指向下一個表結點
int weight; //這個只有網圖才需要使用。普通的圖可以直接忽略
};
//頭結點
struct Vnode
{
Vertextype data; //這個是記錄每個頂點的資訊(現在一般都不需要怎麼使用)
ArcNode * firstarc; //指向第一條依附在該頂點邊的資訊(表結點)
};
1、無向圖
該無向圖中表節點下的數字1、2、3、0對應的是頭結點的下標,用此表示每個頭結點與其他的哪些節點相連
2、有向圖
該有向圖中表節點下的數字1、2、3對應的是頭結點的下標,用此表示每個頭結點與其他的哪些節點具有指向關係
有向圖的鄰接表程式碼實現:
#include<cstdio> #include<iostream> #include<cstring> #include<vector> using namespace std; const int max_v=100; int main() { int v,e; int V[max_v]; cin>>v>>e;///輸入頂點和邊的個數 for(int i=0;i<v;i++) { cin>>V[i];///輸入頂點的值 }int x,y; vector<int> G[max_v]; //vector的用法:https://blog.csdn.net/hancunai0017/article/details/7032383
for(int i=0;i<e;i++) { cin>>x>>y; G[x].push_back(y);///節點x的下一個節點是y } for(int i=0;i<v;i++) { cout<<V[i]<<"->"; for(int j=0;j<G[V[i]].size();j++)//此處的G[V[i]].size()的含義參考另一篇關於拓撲排序的部落格 { cout<<G[V[i]][j]<<' '; } cout<<endl; } return 0; }
輸入:
5 6
0 1 2 3 4
0 1
1 3
2 1
3 0
3 2
4 3
結果顯示:
0->1
1->3
2->1
3->0 2
4->3