鄰接矩陣(無向圖)
考慮到圖是由頂點和邊或弧兩部分組成,合在一起比較困難,那就很自然地考慮到分為兩個結構來分別存儲。
頂點因為不區分大小、主次,所以用一個一維數組來存儲是狠不錯的選擇。
而邊或弧由於是頂點與頂點之間的關系,一維數組肯定就搞不定了,那我們不妨考慮用一個二維數組來存儲。
於是我們的鄰接矩陣方案就誕生了!
圖的鄰接矩陣(Adjacency Matrix)存儲方式是用兩個數組來表示圖。一個一維數組存儲圖中頂點信息,一個二維數組(稱為鄰接矩陣)存儲圖中的邊或弧的信息。
我們可以設置兩個數組,頂點數組為vertex[4]={V0,V1,V2,V3},邊數組arc[4][4]為對稱矩陣(0表示不存在頂點間的邊,1表示頂點間存在邊)。
對稱矩陣:所謂對稱矩陣就是n階矩陣的元滿足a[i][j]=a[j][i](0<=i,j<=n)。即從矩陣的左上角到右下角的主對角線為軸,右上角的元與左下角相對應的元全都是相等的。
有了這個二維數組組成的對稱矩陣,我們就可以很容易地知道圖中的信息:
- 要判定任意兩頂點是否有邊無邊就非常容易了;
- 要知道某個頂點的度,其實就是這個頂點Vi在鄰接矩陣中第i行(或第i列)的元素之和;
- 求頂點Vi的所有鄰接點就是將矩陣中第i行元素掃描一遍,arc[i][j]為1就是鄰接點咯。
鄰接矩陣(有向圖)
可見頂點數組vertex[4]={V0,V1,V2,V3},弧數組arc[4][4]也是一個矩陣,但因為是有向圖,所以這個矩陣並不對稱,例如由V1到V0有弧,得到arc[1][0]=1,而V0到V1沒有弧,因此arc[0][1]=0。
另外有向圖是有講究的,要考慮入度和出度,頂點V1的入度為1,正好是第V1列的各數之和,頂點V1的出度為2,正好是第V1行的各數之和。
鄰接矩陣(網)
在圖的術語中,我們提到了網這個概念,事實上也就是每條邊上帶有權的圖就叫網。