GRAPH
定義:圖形(graph)是由V:頂點(vertices)和E:邊(edges)二個
有限的非空集合所組成以G=(V,E)表示。圖形共分為 兩類:
無向圖形(undirected graph),在無向圖形中,表示邊的
兩個頂點沒有次序關係,因此(v1,v2)和(v2,v1)這兩個頂
點對代表同一個邊。有向圖形(directed graph):在有向
圖形中,每一個邊用一個有序對<v1,v2>表示,v1是該邊的
尾部(tail),而v2是該邊的頭部(head)。因此<v1,v2>與
<v2,v1>代表兩個不同 的邊。
圖形的搜尋方法:
(一)深度優先搜尋(Depth First Search)
從拜訪起始點v開始搜尋的工作。拜訪所包含的工作為
印出節點的頂點欄位。而後,從v的相鄰串列中選取一
個未經拜訪的頂點w,由w點繼續進行深度優先搜尋。
(二)廣度優先搜尋(Breadth First Search)
廣度優先搜尋由頂點v開始,標記它為已拜訪。而後拜
訪v的相鄰串列上的每一個頂點,拜訪過了所有在v相
鄰串列 上的頂點後,接著拜訪與v的相鄰串列 上的第一
個頂點相鄰且未經拜訪的頂點 。雖然圖形有多種可行
的表示法,我們在此僅介紹三種最常用表示法:
(a)相鄰矩陣
令G=(V,E)是具有n個頂點的圖形,n≧1。G的相鄰
矩陣是n×n的二維陣列,稱其為adjmat。如果邊
(vi,vj)(有向 圖則為<vi,vj>)在E(G)中,則
adj_mat[i][j]=1。如果這個邊不在E(G)中,
adj_mat[i][j]=0。一個無 向圖形的相鄰矩陣是對
稱的,因為若且唯若(vi,vj)在E(G)中,則(vj,vi)
也在E(G)中。 相反地,有向圖形的相鄰矩陣不一定
是對稱的。對於無向圖形,我們可以只儲存矩陣的
上三角形 或下三角形部分,以節省空間。
(b)相鄰串列
這個表示法中,我們以n個鏈結串列取代相鄰矩陣中
的n個列,圖形G中的 每一個頂點各有一個串列。此
串列的 節點構造至少包含一個頂點欄位和一個鏈結
欄位。對任一串列i,串列中的節點包含與頂點i相
鄰的頂點。
(c)相鄰多元串列
在無向圖形的相鄰串列表示法中,每一個邊(vi,vj)
都有兩項。一項在vi的串列中,另一項在vj的串列中
。我 們將會看到,有些情況下我們必須很快地找到一
個邊的第二項並加上標記,以表示已經處理過。將串
列表示成多元串列(multilist),就是節點在多個串
列中共用的一種串列,則有助於這種作業。對任一個
邊,僅有一個節點表示,但此節點存在該邊所附著的
兩個頂點之串列上。