1. 程式人生 > >C#數據結構—圖

C#數據結構—圖

del point 有向圖 mce 世界 image 有著 組成 direct

一:圖

  圖狀結構簡稱圖,是另一種非線性結構,它比樹形結構更復雜。樹形結構中的結點是一對多的關系,結點間具有明顯的層次和分支關系。每一層的結點可以和下一層的多個結點相關,但只能和上一層的一個結點相關。而圖中的頂點(把圖中的數據元素稱為頂點)是多對多的關系,即頂點間的關系是任意的,圖中任意兩個頂點之間都可能相關。也就是說,圖的頂點之間無明顯的層次關系,這種關系在現實世界中大量存在。因此,圖的應用相當廣泛,在自然科學、社會科學和人文科學等許多領域都有著非常廣泛的應用。

  1.1:圖的基本概念

   1.1.1:圖的定義

  圖(Graph)是由非空的頂點(Vertex)集合和描述頂點之間的關系——邊(Edge)或弧(Arc)的集合組成。其形式化定義為:

  G=(V,E)

  V={v i |v i ∈某個數據元素集合}
  E={(v i ,v j )|v i ,v j ∈V∧P(v i ,v j )}或E={<v i ,v j >|v i ,v j ∈V∧P(v i ,v j )}

  其中,G 表示圖,V 是頂點的集合,E 是邊或弧的集合。在集合 E 中,P(vi,vj)表示頂點 vi 和頂點 vj 之間有邊或弧相連。下圖給出了圖的示例。

  技術分享圖片

  在圖 (a)中,V={v 1 ,v 2 ,v 3 ,v 4 ,v 5 }E={(v 1 ,v 2 ),(v 1 ,v 3 ),(v 2 ,v 4 ),(v 2 ,v 5 ),(v 3 ,v 4 ),(v 4 ,v 5 )}

  在圖 (b)中,V={v 1 ,v 2 ,v 3 ,v 4 ,v 5 }E={<v 1 ,v 2 >,<v 1 ,v 3 >,<v 2 ,v 3 >,<v 2 ,v 5 ><v 3 ,v 4 >,<v 4 ,v 1 >,<v 4 ,v 5 >}。

  註:無向邊用小括號“()”表示,而有向邊用尖括號“<>”表示。

  1.1.2:圖的基本術語

  1、無向圖:在一個圖中,如果任意兩個頂點v i 和v j 構成的偶對(v i ,v j )∈E是無序的,即頂點之間的連線沒有方向,則該圖稱為無向圖(Undirected Graph)。圖 (a)

是一個無向圖。

  2、有向圖:在一個圖中,如果任意兩個頂點v i 和v j 構成的偶對<v i ,v j >∈E是有序的,即頂點之間的連線有方向,則該圖稱為有向圖(Directed Graph)。圖(b)是一個有向圖。

  3、邊、弧、弧頭、弧尾:無向圖中兩個頂點之間的連線稱為邊(Edge)邊用頂點的無序偶對(v i ,v j )表示,稱頂點v i 和頂點v j 互為鄰接點(Adjacency Point),(v i ,v j )邊依附與頂點v i 和頂點v j 。有向圖中兩個頂點之間的連線稱為弧(Arc)弧用頂點的有序偶對<v i ,v j >表示有序偶對的第一個結點v i 稱為始點(或弧尾),在圖中不帶箭頭的一端;有序偶對的第二個結點v j 稱為終點(或弧頭),在圖中帶箭頭的一端。

  4、無向完全圖:在一個無向圖中,如果任意兩個頂點之間都有邊相連,則稱該圖為無向完全圖(Undirected Complete Graph)。可以證明,在一個含有 n 個頂點的無向完全圖中,有 n(n-1)/2 條邊。

  5、有向完全圖:在一個有向圖中,如果任意兩個頂點之間都存在方向互為相反的兩條弧,則稱該圖為有向完全圖(Directed Complete Graph)。可以證明,在一個含有 n 個頂點的有向完全圖中,有 n(n-1)條弧。

  6、頂點的度、入度、出度:在無向圖中,頂點 v 的度(Degree)是指依附於頂點 v 的邊數,通常記為 TD(v)。在有向圖中,頂點的度等於頂點的入度(In Degree)與頂點的出度之和。頂點v的入度是指以該頂點v為弧頭的弧的數目,記為ID(v);頂點 v 的出度(Out Degree)是指以該頂點 v 為弧尾的弧的數目,記為 OD(v)。所以,頂點 v 的度 TD(v)= ID(v)+ OD(v)。

  例如,在無向圖 (a)中有:

  TD(v 1 )=2 TD(v 2 )=3 TD(v 3 )=2 TD(v 4 )=3 TD(v 5 )=2
  在有向圖 (b)中有:
  ID(v 1 )=1 OD(v 1 )=2 TD(v 1 )=3
  ID(v 2 )=1 OD(v 2 )=2 TD(v 2 )=3
  ID(v 3 )=2 OD(v 3 )=1 TD(v 3 )=3
  ID(v 4 )=1 OD(v 4 )=2 TD(v 4 )=3
  ID(v 5 )=2 OD(v 5 )=0 TD(v 5 )=2

  

C#數據結構—圖