資料結構 筆記:圖的定義與操作
阿新 • • 發佈:2018-11-29
定義
-圖是由頂點集合(Vertex)及頂點間的關係集合(Edge)組成的一種資料結構
-Graph = (V,E)
-V= 是頂點的有窮非空集合
-E=是頂點之間關係的有窮集合
無向邊
-頂點x和y之間的邊沒有方向,則稱該邊為無向邊
-<x,y> 與<y,x>意義不同
·<x,y>表示從x連線到y,x成為尾,y成為頭
·<y,x>表示從y連線到x,y稱為尾,x稱為頭
有向圖
-圖中任意兩個頂點之間的邊均是有向邊,則稱該圖為有向圖
-無向圖可以看做一種特殊的有向圖
頂點鄰接(Adjacent)的定義
-無向圖
·如果(x,y)∈E,則稱頂點x和y互為鄰接
-有向圖
·如果<x,y>∈E,則稱頂點x鄰接到頂點y
度(Degree)的定義
-頂點v的度是和v相關聯的邊的數目,記為TD(v)
·入度:以v為頭的邊的數目,記為ID(v)
·出度:以v為尾的邊的數目,記為OD(v)
推論
-TD(v) = ID(v) + OD(v)
-Count(E) = ID(V1) +ID(V2)+...+ID(Vn)
-Count(E) = OD(V1)+OD(V2)+...+OD(Vn)
-Count(E) = [TD(V1) + TD(V2) + ...+TD(Vn)] / 2
權(Weight)的定義
-與圖的邊相關的資料元素叫做權
-權常用來表示圖中頂點間的距離或者耗費
圖的一些常用操作
-設定頂點的值
-獲取頂點的值
-獲取鄰接頂點
-設定邊的值
-刪除邊
-獲取頂點數
-獲取邊數
圖在程式中變現為一種特殊的資料型別
template <typename V,typename E> class Graph : public Object { public: virtual V getVertex(int i) = 0; virtual bool getVertex(int i,V& value) = 0; virtual bool setVertex(int i,const V& value) = 0; virtual SharedPointer<Array <int>> getAdjacent(int i) = 0; virtual E getEdge(int i,int j) = 0; virtual bool getEdge(int i,int j,E& value ) = 0; virtual bool setEdge(int i,int j,const E& value) = 0; virtual bool removeEdge(int i,int j) = 0; virtual int vCount() = 0; virtual int eCount() = 0; virtual int OD(int i) = 0; virtual int ID(int i) = 0; virtual int TD(int i) ; };
總結:
-圖是頂點與邊的集合,是一種非線性的資料結構
-圖中頂點可以與多個其他頂點產生鄰接關係
-圖中的邊有與之對應的權值,表示頂點間的距離
-圖在程式中變現為特殊的資料型別