9、圖

作者:whj95

導讀

圖的定義

定義1:
這裏寫圖片描述
  圖由頂點(vertices)和(edges)構成
  
定義2:

  有向圖(directed graph)表示爲(a,b),a爲起始點,b爲終止點。值得一提的是,無向圖的表達爲{a,b}.
  

圖的術語

無向圖

定義1:

  在無向圖中,我們把兩個有邊連接起來的端點,兩點彼此稱爲鄰接(adjacent/neighbors),這條邊與他們關聯(connect).
  
定義2:
這裏寫圖片描述
  給出無向圖中(degree)的概念,頂點a的度記爲deg(a),表示a點鄰接的邊數。
  注:1個(loop)貢獻2個度。 

定理1:
握手定理  
  握手定理:簡而言之,即總度=總邊數*2。很容易理解,1條邊必然對2個頂點各有貢獻1個度(包括自環)。

定理2:
這裏寫圖片描述
  簡而證之,由於定理1,總度必爲偶數,所以奇數度頂點必有偶數個。

有向圖

定義1:
這裏寫圖片描述
  注意此處開始有順序,鄰接分爲鄰接到(adjacent to)和從…鄰接(adjacent from)。我們將首尾的兩點分別稱爲:起點(initial vertex),終點(terminal/end vertex)。

定義2:
這裏寫圖片描述
  介紹入度(deg (v))及出度(deg+ (v))。入度即爲進入的(箭頭指入的),出度即爲出去的(箭頭指出的)。環各貢獻1個入度,1個出度。
  注意: deg 表示入度(可以理解爲只索取不給予,毫無貢獻,所以給負分“-”)。

定理1:
這裏寫圖片描述
  入度=出度=總邊數
  簡單理解:“收支平衡的月光族”
  

圖的表示

圈圖/C圖

  圈圖(circle)。相鄰邊相接,示例如下:
  這裏寫圖片描述

星圖/S圖

  星圖(star)。有一箇中心點與所有的點連接,而其他點各不相連,示例如下:
  這裏寫圖片描述

輪圖/W圖

  輪圖(wheel)。圈圖+星圖(圈圖和星圖的並運算),示例如下:
  這裏寫圖片描述

完全圖/K圖

  完全圖(complete)。每個點與其他所有點都相連,示例如下:
  這裏寫圖片描述
  注:無向完全圖的邊數爲C2n ,有向完全圖的邊數爲P2n 。理解:即n個點取2個點連線,無向無順序,有向需順序。

二部圖/偶圖

定義:
這裏寫圖片描述
  二部圖(bipartite)即爲每條邊的兩個端點必須分別坐落在兩個不同的集合(紅方 藍方)裏。所以,可用紅藍染色法(相鄰頂點顏色不同即二部圖,否則不是)來檢測一個圖是否爲二部圖。
  

完全二部圖

  完全二部圖(complete bipartite)定義簡述爲:二部圖中兩集合中的元素滿射
  如下圖所示 K2,3, K3,3, K3,5, and K2,6即爲完全二部圖:
  這裏寫圖片描述

子圖 生成子圖 導出子圖 主子圖

  如下圖所示,G1是G的生成子圖(保留所有頂點即可),G2是G的導出子圖(induced subgraph,選出部分頂點及其所有互聯邊),G3是G的主子圖(主圖-除去部分頂點及其所有互聯邊)。
這裏寫圖片描述

並運算

  沒什麼好說的,並運算的延伸而已。
  

圖的同構

鄰接表 (adjacency list)

  這裏寫圖片描述
  

鄰接矩陣 (adjacency matrix)

  這裏寫圖片描述
  

關係矩陣 (incidence matrix)

  這裏寫圖片描述

同構 (isomorphism)

  ①首先是否有相同的邊、相同的頂點數、各頂點的度。都符合則跳至②,否則不是同構;②檢查某些點是否相連,比如度均爲2的點是否連接。如圖不是同構,因爲G中度3與度2相連,H中度3與度3相連:
  這裏寫圖片描述

連通性 connectivity

基本概念

  通路 (path):若干點的連線
  長度 (length):邊的數目
  迴路 (circuit):頭尾點相同
  
  ①簡單(simple)的定義:通路中沒有經過重複邊和自環
    跡 (trail)簡單 path
  ②基本的定義:通路中沒有經過重複點
    環 (cycle)基本 circuit(除了頭尾相等)

無向圖的連通性

  連通性 (connected) 每個點間都有通路
  連通分支 (connected component):無公共點的若干個連通子圖的並
  這裏寫圖片描述
  割點 (cut vertex):除去一個點及與這點有關的所有邊,能把連通圖切爲若干連通分支
  割邊/橋 (cut edge/bridge):除去一條邊,能把連通圖切爲若干連通分支
  這裏寫圖片描述

有向圖的連通性

  強連通 (strongly connected):每個點互相都能到達(雙向通路可以間接到達)
  弱連通 (weakly connected)不考慮方向,到達即可
  這裏寫圖片描述
  G是強連通,因爲處處互相都能連通;H是弱連通,因爲考慮有向無法處處到達,無向纔可以。
  計算通路數:貼個例題就好:
  這裏寫圖片描述

歐拉通路及漢密爾頓通路

歐拉通路與歐拉回路

無向歐拉

  這裏寫圖片描述
  歐拉回路 (Euler circuit)歐拉+簡單迴路 走完所有的不重複並返回起點
  歐拉通路 (Euler path)歐拉+簡單通路 走完所有的不重複。例題:
  這裏寫圖片描述
  歐拉回路充要條件所有點都是偶數度
  歐拉通路充要條件有且僅有 2個點爲 奇數度,且必須以奇數度作爲端點出發
  

有向歐拉

  歐拉回路充要條件所有點都是入度=出度
  歐拉通路充要條件1個點入度<出度,1個點入度>出度,其他點入度=出度。來個例子:
  這裏寫圖片描述
  這裏寫圖片描述

de Bruijn Cycles

  這部分略去。

漢密爾頓通路與漢密爾頓迴路

  漢密爾頓迴路 (Hamilton circuit)漢密爾頓+基本回路 走完所有的不重複並返回起點
  漢密爾頓通路 (Hamilton path)漢密爾頓+基本通路 走完所有的不重複。例題:
  這裏寫圖片描述
  簡單判定規律
  ①存在 度= 1 無漢密爾頓迴路
  ②2度頂點的兩條邊屬於任意漢密爾頓迴路
  ③n>=3時,完全圖均有漢密爾頓迴路
  
  漢密爾頓迴路充分條件不滿足也有可能是漢密爾頓迴路
  ①狄拉克、奧爾定理(Dirac’s/Ore’s theorem)這裏寫圖片描述
  ②
  這裏寫圖片描述
  ③完全二部圖K(n,n)上下端點相等則有漢密爾頓迴路
  
  漢密爾頓通路充分條件
  ①
  這裏寫圖片描述

最短通路

  帶權圖:每條edge都附上了“權”的色彩,長度length≠邊數和,而是=權和。

狄克斯特拉算法 (Dijkstra’s Algorithm)

  ①選擇 定點 v1=0,其他頂點爲∞
  ②與這個頂點的有關邊全部走過,並在所有終端點處記下總通路(v1到此終端點)的權和,更新最小值
  ③沿最短路徑移動定點,重複②
  
  具體算法借用數據結構中的例子,以C語言爲例:

/*
測試數據 教科書 P189 G6 的鄰接矩陣 其中 數字 1000000 代表無窮大
6
1000000 1000000 10 100000 30 100
1000000 1000000 5 1000000 1000000 1000000
1000000 1000000 1000000 50 1000000 1000000
1000000 1000000 1000000 1000000 1000000 10
1000000 1000000 1000000 20 1000000 60
1000000 1000000 1000000 1000000 1000000 1000000
結果:
D[0]   D[1]   D[2]   D[3]   D[4]   D[5]
 0   1000000   10     50     30     60
*/
#include <iostream>
#include <cstdio>
#define MAX 1000000
using namespace std;
int arcs[10][10];//鄰接矩陣
int D[10];//保存最短路徑長度
int p[10][10];//路徑
int final[10];//若final[i] = 1則說明 頂點vi已在集合S中
int n = 0;//頂點個數
int v0 = 0;//源點
int v,w;
void ShortestPath_DIJ()
{
     for (v = 0; v < n; v++) //循環 初始化
     {
          final[v] = 0; 
          D[v] = arcs[v0][v];
          for (w = 0; w < n; w++) 
              p[v][w] = 0;//設空路徑
          if (D[v] < MAX) 
          {
              p[v][v0] = 1; 
              p[v][v] = 1;
          }
     }
     D[v0] = 0; 
     final[v0]=0; //初始化 v0頂點屬於集合S
     //開始主循環 每次求得v0到某個頂點v的最短路徑 並加v到集合S中
     for (int i = 1; i < n; i++)
     {
          int min = MAX;
          for (w = 0; w < n; w++)
          {
               //我認爲的核心過程--選點
               if (!final[w]) //如果w頂點在V-S中
               {
                    //這個過程最終選出的點 應該是選出當前V-S中與S有關聯邊
                    //且權值最小的頂點 書上描述爲 當前離V0最近的點
                    if (D[w] < min) 
                    {
                        v = w; 
                        min = D[w];
                    }
               }
          }
          final[v] = 1; //選出該點後加入到合集S中
          for (w = 0; w < n; w++)//更新當前最短路徑和距離
          {
               /*在此循環中 v爲當前剛選入集合S中的點
               則以點V爲中間點 考察 d0v+dvw 是否小於 D[w] 如果小於 則更新
               比如加進點 3 則若要考察 D[5] 是否要更新 就 判斷 d(v0-v3) + d(v3-v5) 的和是否小於D[5]
               */
               if (!final[w] && (min+arcs[v][w]<D[w]))
               {
                    D[w] = min + arcs[v][w];
                   // p[w] = p[v];
                    p[w][w] = 1; //p[w] = p[v] + [w]
               }
          }
     }
}


int main()
{
    cin >> n;
    for (int i = 0; i < n; i++)
    {
         for (int j = 0; j < n; j++)
         {
              cin >> arcs[i][j];
         }
    }
    ShortestPath_DIJ();
    for (int i = 0; i < n; i++) 
        printf("D[%d] = %d\n",i,D[i]);
    return 0;
}

  距離矩陣 (distance matrix):行爲起始點,列爲終端點,有通路的賦權值,無通路的爲∞。尋找最短路徑用的仍是狄克斯特拉算法①尋找定點v1(即第一行);②然後選擇最短路徑(下圖爲25),記下終端點作爲新定點(下圖爲v5即第五行),並通過定點與該行所有元素累加(即走過所有有關邊)時時更新最短路徑和;③重複②直到所有終端點都遍歷 。一發例子如下:
  這裏寫圖片描述
  這裏寫圖片描述

Warshall-Floyd theorem

  ①第一行第一列 第二行第二列….以此類推畫出基準
  ②忽略其中的無窮項,根據基準權和小的取代權和大的
  ③選取方法爲行選一個列選一個加和,然後行列同時後(下)移一位繼續,直至選完
  例子:
  這裏寫圖片描述
  這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述

可平面圖

  定義:一個圖如果各邊除了端點外沒有其他交點,則可平面(planar)
  判定方法:先假設可平面。選取幾個點畫出可平面圖形,然後分割出區域餘下的點分別嘗試放入不同的區域,看看最後會不會引起矛盾。來發例子:
  這裏寫圖片描述
  歐拉公式: v+r = e+2(面+點=邊+2)
  
  推論1:這裏寫圖片描述
  證明爲引入面次數的概念,一個面至少有3次,2e = deg(R)>=3r,再運用歐拉公式可得。可證明K5不可平面
  注:不滿足一定不可平面,滿足不一定可平面
  
  推論2:這裏寫圖片描述
  證明爲推論1+握手定理
  
  推論3:這裏寫圖片描述
  與1相比實則蘊含v≥4的條件,可證明K3,3不可平面
  

庫拉圖斯基定理 (Kuratowski’s Theorem)

  理論基礎:若該圖子圖包含K3,3,K5及其同構則一定不可平面
  初等細分( elementary subdivison):刪除一條邊,添加新頂點與刪除邊的端點各自連接,不改變可平面性
  通過引入細分概念尋找同胚圖( homeomorphic),引用2個例子:
  這裏寫圖片描述
  這裏寫圖片描述
  注:若頂點deg=4,嘗試轉化爲K5;若deg=3,嘗試轉化爲K3,3
  

圖着色

  色數 (chrometic number):所有頂點染色(相鄰點顏色不同)所需要的最小顏色數
  不同圖所需色數:
  ①Kn圖,n種(顯而易見)
  ②Km,n圖,2種(二部圖的標誌)
  ③Cn圖,當n爲偶數 ,2種(舉例即可顯而易見)
       當n爲奇數 ,3種

發佈了23 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章