一、
圖(graph):圖是由頂點的有窮非空集合和頂點之間邊的集合組成,通常表示為:g(v,e),其中,g表示乙個圖,v是圖g中的頂點的集合,e是圖g中邊的集合。
頂點(vertex):圖中的資料元素。線性表中我們把資料元素叫元素,樹中將資料元素叫結點。
邊:頂點之間的邏輯關係用邊來表示,邊集可以是空的。
無向邊(edge):若頂點v1到v2之間的邊沒有方向,則稱這條邊為無向邊。
無向圖(undirected graphs):圖中任意兩個頂點之間的邊都是無向邊。(a,d)=(d,a)
對於無向圖g來說,g1=(v1,),其中頂點集合v1=;邊集和e1=
有向邊:若從頂點v1到v2的邊有方向,則稱這條邊為有向邊,也稱弧(arc)。用表示,v1為狐尾(tail),v2為弧頭(head)。(v1,v2)≠(v2,v1)。
有向圖(directed graphs):圖中任意兩個頂點之間的邊都是有向邊。
注意:無向邊用「()」,而有向邊用「< >」表示。
簡單圖:圖中不存在頂點到其自身的邊,且同一條邊不重複出現。
無向完全圖:無向圖中,任意兩個頂點之間都存在邊。
有向完全圖:有向圖中,任意兩個頂點之間都存在方向互為相反的兩條弧。
稀疏圖:有很少條邊。
稠密圖:有很多條邊。
網(network):帶權的圖。
子圖(subgraph):假設g=(v,)和g『=(v',),如果v'包含於v且e'包含於e,則稱g'為g的子圖。
路徑的長度:一條路徑上邊或弧的數量。
連通圖:圖中任意兩個頂點都是連通的。
連通分量:無向圖中的極大連通子圖。(子圖必須是連通的且含有極大頂點數)。圖1有兩個連通分量
強連通分量:有向圖中的極大強連通子圖。
生成樹:無向圖中連通且n個頂點n-1條邊叫生成樹。
有向樹:有向圖中一頂點入度為0其餘頂點入度為1。
森林:乙個有向圖由若干棵有向樹構成生成森林。
二、圖的儲存結構
1.鄰接矩陣:用兩個陣列,乙個陣列儲存頂點集,乙個陣列儲存邊集。
#define maxvex 1002.鄰接表:陣列與煉表相結合的儲存方法。typedef struct
mgraph;
三、圖的遍歷
1.深度優先遍歷(dfs):從圖中某個頂點v出發,訪問此頂點,然後從v的未被訪問的鄰接點出發深度優先遍歷圖,直至圖中所有和v有路徑相通的頂點都被訪問到。
2.廣度優先遍歷(bfs):類似於樹的層次遍歷。
四、最短路徑
1.迪傑斯特拉演算法(dijkstra):把圖中的頂點集合v分成兩組,第一組為已求出最短路徑的頂點集合s(初始時s中只有源節點,以後每求得一條最短路徑,就將它對應的頂點加入到集合s中,直到全部頂點都加入到s中);第二組是未確定最短路徑的頂點集合u。
演算法步驟:
(1)初始化時,s只含有源節點;
(2)從u中選取乙個距離v最小的頂點k加入s中(該選定的距離就是v到k的最短路徑長度);
(3)以k為新考慮的中間點,修改u中各頂點的距離;若從源節點v到頂點u的距離(經過頂點k)比原來距離(不經過頂點k)短,則修改頂點u的距離值,修改後的距離值是頂點k的距離加上k到u的距離;
(4)重複步驟(2)和(3),直到終點在s中。
2.弗洛伊德演算法(floyd):
1,從任意一條單邊路徑開始。所有兩點之間的距離是邊的權,如果兩點之間沒有邊相連,則權為無窮大。
2,對於每一對頂點 u 和 v,看看是否存在乙個頂點 w 使得從 u 到 w 再到 v 比已知的路徑更短。如果是更新它。
目標:重做書本本章課後習題
第六章學習小結
第六章主要進行有關圖的學習,這一章學得東西很多,涉及圖的方方面面包括如何定義儲存結構,如何初始化,如何建立一張圖,如何進行圖的操作等等。6 1主要學習了圖的基本知識,不帶權圖包括有向圖,無向圖,帶權圖包括有向網路,無向網路。在求度的時候要注意無向圖和有向圖的區別,有向圖包括入度和出度。連通分量 最大...
第六章學習小結
一.圖的概念 1.圖 無向圖 有向圖 完全圖 2.度 入度 出度 3.路徑 由頂點和相鄰頂點序偶構成的邊所形成的序列 4.連通圖 連通分量 無向圖 5.強連通圖 連通分量 極大強連通子圖 有向圖 二.圖的儲存結構 1.鄰接矩陣 typedef struct graph 2.鄰接表 typedef s...
mysql第六章 第六章 mysql日誌
第六章 mysql日誌 一 錯誤日誌 錯誤日誌的預設存放路徑是 mysql 存放資料的地方 hostname.err 1.修改錯誤日誌存放路徑 mysqld log error data mysql mysql.log 2.檢視配置命令 show variables like log error 3...