圖論(1)--圖的基本概念


有向圖和無向圖的建立以及賦權圖

引入

Q:什么是圖論?

A:圖論是數學的一個分支。它以圖為研究對象。圖論中的圖是由若干給定的點及連接兩點的線所構成的圖形,這種圖形通常用來描述某些事物之間的某種特定關系,用點代表事物,用連接兩點的線表示相應兩個事物間具有這種關系。

現在我們來探討無向圖和有向圖的概念以及如何去建立最基本的圖的模型

什么是圖

對於初入圖論的人來說,復雜的定義可能會直接勸退他們,現在我來舉一個非常簡單的例子。

這就是最常見的圖,由於它沒有指向,即沒有明確的方向,它被稱為無向圖。

圖是由頂點和邊組成的,你應該很容易就知道那些元素是頂點,那些是邊。

下面的具有方向的便是有向圖:

若有的邊有向,有的邊無向,則稱為混合圖。

接下來我們將引入更多的概念:

若兩個頂點有邊相連,則稱兩個頂點相相鄰,兩個點稱為起點/終點或端點

如1指向2,則這兩個頂點相鄰,這兩個頂點被稱為斷點,而1被稱為起點,2被稱為終點。

僅含一個頂點的邊稱為自環

在無向圖中,包含頂點v的邊的個數,稱為頂點的度。 在有向圖中,以v為起點的邊的個數,稱為點的出度,以v為終點的邊的個數,稱為頂點的入度。

無向圖的建立

建立簡單無向圖,我們使用Matlab,版本為R2017a。

% 函數graph(s,t):可在 s 和 t 中的對應節點之間創建邊,並生成一個圖
% s 和 t 都必須具有相同的元素數;這些節點必須都是從1開始的正整數,或都是字符串元胞數組。
s1 = [1,2,3,4]; %s為頂點,必須保證連續且從1開始的正整數
t1 = [2,3,1,1]; %邊 s與t之間是一一對應的
G1 = graph(s1, t1);
plot(G1)  %畫出效果圖

效果圖:

帶漢字的無向圖:

% 注意字符串元胞數組是用大括號包起來的哦
s2 = {'學校','電影院','網吧','酒店'};
t2 = {'電影院','酒店','酒店','KTV'};
G2 = graph(s2, t2);
plot(G2, 'linewidth', 2)  % 設置線的寬度
% 下面的命令是在畫圖后不顯示坐標
set( gca, 'XTick', [], 'YTick', [] );  

效果圖:

有向圖的建立:

% 無權圖 digraph(s,t)
s = [1,2,3,4,1];
t = [2,3,1,1,4];
G = digraph(s, t);
plot(G)
set( gca, 'XTick', [], 'YTick', [] );  

注意邊的順序和方向,依次為1指向2,2指向3,3指向1,4指向1和1指向4

效果圖:

賦權圖的建立:

賦權圖,每條邊都有一個非負實數對應的圖。這個實數稱為這條邊的權。

簡而言之就是,頂點到頂點每一條邊上都有一個數字,這個數字被稱為權,在不同的實際問題當中權被理解成不同概念,例如,在最經典的求解最短路徑問題中,權被理解為路程長短。

這就是一個賦權圖的例子,現在我們來着手創建賦權有向圖和賦權無向圖

賦權無向圖

% 函數graph(s,t,w):可在 s 和 t 中的對應節點之間以w的權重創建邊,並生成一個圖
s = [1,2,3,4];
t = [2,3,1,1];
w = [3,8,9,2];
G = graph(s, t, w);
plot(G, 'EdgeLabel', G.Edges.Weight, 'linewidth', 2) 
set( gca, 'XTick', [], 'YTick', [] ); 

在之前s,t基礎上,我們增加w這個值,就是權重,其余的代碼不變。

效果圖:

賦權有向圖

s = [1,2,3,4];
t = [2,3,1,1];
w = [3,8,9,2];
G = digraph(s, t, w);
plot(G, 'EdgeLabel', G.Edges.Weight, 'linewidth', 2) 
set( gca, 'XTick', [], 'YTick', [] );

鄰接矩陣

為了我們方便進行數學上的計算,我們引入圖的鄰接矩陣這個概念。

當圖上兩個頂點相鄰時,我們用1來表示,當圖上兩個頂點不相鄰時,我們用0來表示,這樣由0和1組成的矩陣我們稱為圖的鄰接矩陣。

先看行再看列,例如(1,1)元素值為0,代表它不形成自環,(1,2)元素值為1,代表1和2是鄰接的,以此類推。

可以看到,這種表示法非常簡單、直接,另外無向圖的鄰接矩陣是一個對稱陣。

關聯矩陣

我們引入關聯矩陣的概念,同樣是在圖中,當頂點是這條邊的起點時,記為1,為終點時,記為-1。除此之外的其他情況記為0。


接下來我們將會介紹如何圖的最短路徑問題以及求解最短路徑的算法迪傑斯特拉算法和弗洛伊德算法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM