1. 程式人生 > >資料結構 筆記:圖的定義與操作

資料結構 筆記:圖的定義與操作

定義

-圖是由頂點集合(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) ;
};

總結:

-圖是頂點與邊的集合,是一種非線性的資料結構

-圖中頂點可以與多個其他頂點產生鄰接關係

-圖中的邊有與之對應的權值,表示頂點間的距離

-圖在程式中變現為特殊的資料型別