基礎圖論

mzyczly發表於2019-06-14

基本概念

二元組(V, E) 稱為圖。V為頂點的集合,E為V中頂點之間的邊的集合。

自環:一條邊的兩個端點是重合的。

重邊:兩個端點之間有兩條以上的邊

簡單圖:沒有自環和重邊的圖

左圖是簡單圖,右圖中存在環和重邊。

邊和向

無向邊:邊是雙向的

有向邊:單向邊,有箭頭

無向圖:只有無向邊的圖

有向圖:只有有向邊的圖

頂點的度

無向圖中,一個頂點相連的邊數稱為該頂點的度。

有向圖中,從一個頂點出發的邊數稱為該頂點的出度;到達該頂點的邊數稱為它的入度。

權和網

在圖的邊給出相關的數,稱為權。

權可以表示一個頂點到另一個頂點的距離,耗費等。帶權圖一般稱為網。

圖的種類

完全圖:任何兩個頂點之間都有邊相連的圖

n階完全圖的任意一點v有:d(v)=n-1

非完全圖:至少有兩個頂點之間無邊相連的圖

稀疏圖:邊很少的圖

稠密圖:邊很多的圖

利用圖解決數學競賽題目好牛逼啊

例:有一個1982人組成的團體,其中任意4人中至少有一人認識其他三人,求至少有多少人認識這個團體中其他所有人。(額,有點難啊

分析:轉換為圖,人為點,認識為邊。顯然,最多是全部人互相認識,即該圖為完全圖,但該題求最小數,即求非完全圖中d(v)=1981的點的最小個數。

設u,v之間無邊,則d(u)<=1980,d(v)<=1980,再設另外兩點x,y之間也無邊,則不符合題意。所以x,y必定有邊,且其中至少有一個點與u,v有邊,則至少有1979個點與其他點都有邊。

 圖的鄰接矩陣表示法

相鄰矩陣是表示結點間相鄰關係的矩陣。

若G=(V,E)是一個具有n個結點的圖,則G的相鄰矩陣是如下定義的二維陣列a,其規模為n*n

 A(i,j)= 1 表示頂點i和頂點j有邊

 A(i,j)= 0 表示頂點i和頂點j無邊

有就是,兩點為1就有連線,為0無連線

鄰接矩陣為

 

同樣,網和有向圖表示為:

                                        

 空間複雜度:O(V^2)

優點:直觀,容易理解,可以直接檢視任意兩點的關係。

缺點:對於稀疏圖,會有很多空間根本沒有利用。不能處理重邊。要查詢某一個頂點的所有邊,要列舉V次。

圖的鄰接連結串列表示法(主要應對稀疏圖)

對圖的每個頂點建立一個單連結串列(n個頂點建立n個單連結串列),第i個單連結串列中的結點包含頂點Vi的所有鄰接頂點。

空間複雜度:有向圖O(V+E)無向圖O(V+2*E)   

優點節省空間,能快速找到某個頂點所有相連的頂點,而無需訪問無關頂點。

對於大多數圖來說都是稀疏圖,所以務必掌握用鄰接連結串列來儲存圖。

鄰接連結串列

struct Edge//儲存每條邊
{
int v,w,next
}e[maxn];
int k=1,head[maxn];//每條連結串列的第一條邊
void adde(int u,int v,int w)//加邊
{
    e[k].v=v;
    e[k].w=w;
    e[k].next=head[u];
    head[u]=k++;
}

OK!

拓撲排序

相關文章