全部的邊用一個e[]數組來存儲,每條邊對應的索引就是其編號。在創建鄰接表時,表中存放的實質是邊的編號。數組
注意:點的編號和邊的編號不一樣spa
1 int N,M; //N爲點的最大數量,M爲邊的最大數量 2 int idx; //爲當前邊的編號
3 int head[N],e[M],ne[M];
4 head[a]; //存放一個a點鏈接的邊的編號 5 e[idx]; //抽象爲表示idx當前邊,但結果存放的是b點的編號 6 ne[idx]; //表示當前編號爲idx的邊的後面一條邊 7 8 //注意:head[a]中索引存放的是(a->b)a點的編號 9 //e[idx]的結果存放的是(a->b)中b點的編號,表示新建一個結點 10 //其餘的全部位置均表示邊的編號 11 12 void addEdge(int a,int b) //加入一條從a到b的邊 13 { 14 //頭插法 15 e[idx] = b; //建一個a->b的結點 16 ne[idx] = h[a]; 17 h[a] = idx++; 18 }