鄰接矩陣 是否有路徑 從深度遍歷出發的

2021-10-12 07:00:01 字數 1872 閱讀 6138

問題描述 :

目的:使用c++模板設計並逐步完善圖的鄰接矩陣抽象資料型別(adt)。

內容:(1)請參照圖的鄰接矩陣模板類原型,設計並逐步完善圖的鄰接矩陣adt。(由於該環境目前僅支援單檔案的編譯,故將所有內容都集中在乙個原始檔內。在實際的設計中,推薦將抽象類及對應的派生類分別放在單獨的標頭檔案中。)

(2)設計並實現乙個演算法,對於給定圖中的任意兩個頂點,檢查它們之間是否有路徑存在。如路徑存在,返回true;否則返回false。圖的儲存結構採用鄰接矩陣。將其加入到adt中。

注意:dg(有向圖), dn(有向網), udg(無向圖), udn(無向網)

//檢查兩個結點之間是否有路徑存在(外殼部分,公有成員函式) 

template

<

class

typeofver

,class

typeofedge

>

bool adjmatrix_graph

::checkroute

(int u,

int v)

;//檢查兩個結點之間是否有路徑存在(遞迴部分,私有成員函式)

template

<

class

typeofver

,class

typeofedge

>

bool adjmatrix_graph

::checkroute

(int u,

int v,

int visited)

;

輸入說明 :

第一行:圖的型別

第二行:結點數

第三行:結點集

第四行:邊數

第五行:邊集

第六行:起點u

第七行:終點v

輸出說明 :

第一行:頂點集

空行第二行:鄰接矩陣

空行第三行:true(路徑存在)/false(路徑不存在)

輸入範例 :

dg

4a b c d

40 1

0 22 3

3 11

0

輸出範例 :
a b c d

0 1 1 0

0 0 0 0

0 0 0 1

0 1 0 0

false

思路分析

實現偽碼

/*

描述:檢查兩個結點之間是否有路徑存在(外殼部分,公有成員函式)

*/bool

checkroute

(int u,

int v)

,num =0;

//判定傳入的值是否符合規定

checkroute

(u,v,visited);}

/* 描述:檢查兩個結點之間是否有路徑存在(遞迴部分,私有成員函式)

*/bool

checkroute

(int u,

int v,

int visited)

//如果訪問過了,再找下乙個子節點

nextgoal =

getnext

(u,nextgoal,nextgoal);}

return flag;

//全部都訪問了,直接返回

}

事故現場

分析總結

深度優先遍歷(鄰接矩陣)

problem description 無向連通圖的頂點值為字元型且互不相等,採用鄰接矩陣儲存。請從儲存下標為0的頂點開始深度優先遍歷,在選取下乙個未被訪問的鄰接點時,優先選擇儲存下標小的頂點,輸出該遍歷序列。input 有多組資料,每組第一行為兩個整數n和e,表示n個頂點和e條邊 0using n...

鄰接矩陣 鄰接表的遍歷方法

根據大話資料結構整理 輸入 鄰接矩陣vmatrix 鄰接表vlist,頂點表vnode 輸出 遍歷vva元素 include include include using namespace std define inf 5000 鄰接矩陣深度優先遍歷 void dfsmatrix vector vv...

最短路徑 鄰接矩陣

思路 先記錄1到所有點的距離 沒有連線記為無窮大 為到達該點的最短路徑長,然後從1開始利用貪心思想依次找出到下乙個連線點的最短距離,然後再找以該點為基準的下乙個距離最近的點,判斷從1先到乙個點再到該點的距離與從1直接到該點距離的大小,若小,則更新dis距離長,否則不更新 若不理解,建議看看簡單易懂 ...