1. 程式人生 > >鄰接表理解

鄰接表理解

自己 microsoft for 包含 blog soft cto cin 自己的

http://developer.51cto.com/art/201404/435072.htm

這篇文章講鄰接表講的很好。記錄一下自己的理解。

鄰接表用的是鏈式存儲結構,根據圖很好理解,但是一看代碼就懵了。拿原文提到的一個數據舉例:

4 5

1 4 9

4 3 8

1 2 5

2 4 6

1 3 7

四個頂點5條邊,自然可以先拿u[],v[],w[]數組記錄每條邊,因為要用數組模擬鏈表,所以想到可以開兩個數組first[],next[](初始化都為-1),first[]存的是以頂點為起始點的最後一條邊。比如first[1]=5,因為頂點1最後在第5條邊且為初始點。那麽前面還有1的邊怎麽辦呢?就用next[]數組記錄這個點所在的上一條邊,所以next[5]=3,next[3]=1,即頂點1最後在5號邊,5號邊上一個包含頂點1的邊是3號邊等等。。

大概寫個代碼:

 1 int maxn=100;
 2 int v[maxn],u[maxn],w[maxn],first[maxn],next[maxn];
 3 int n,m,a,b,c;
 4 cin>>n>>m;
 5 for(int i=1;i<=n;i++) first[i]=-1;
 6 for(int i=1,i<=m;i++){
 7     cin>>u[i]>>v[i]>>w[i];
 8     next[i]=first[u[i]];//i號邊所在頂點的上一條邊是first[u[i]]號邊
 9
first[u[i]]=i;//以u[i]為起始頂點的最後一條邊是i號邊 10 }

鄰接表理解