鄰接表理解
阿新 • • 發佈:2017-08-12
自己 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]]號邊 9first[u[i]]=i;//以u[i]為起始頂點的最後一條邊是i號邊 10 }
鄰接表理解