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個頂點的圖形,n1G的相鄰

             矩陣是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),就是節點在多個串

            列中共用的一種串列,則有助於這種作業。對任一個

            邊,僅有一個節點表示,但此節點存在該邊所附著的

            兩個頂點之串列上。

 

              秀出範例畫面