【PTA】鄰接矩陣儲存圖的深度優先遍歷
【PTA】鄰接矩陣儲存圖的深度優先遍歷
題目
試實現鄰接矩陣儲存圖的深度優先遍歷。
函式介面定義:
void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) );
其中MGraph是鄰接矩陣儲存的圖,定義如下:
typedef struct GNode *PtrToGNode;
struct GNode{
int Nv; /* 頂點數 */
int Ne; /* 邊數 */
WeightType G[MaxVertexNum][MaxVertexNum]; /* 鄰接矩陣 */
};
typedef PtrToGNode MGraph; /* 以鄰接矩陣儲存的圖型別 */
函式DFS應從第V個頂點出發遞迴地深度優先遍歷圖Graph,遍歷時用裁判定義的函式Visit訪問每個頂點。當訪問鄰接點時,要求按序號遞增的順序。題目保證V是圖中的合法頂點。
裁判測試程式樣例:
#include <stdio.h>
typedef enum {false, true} bool;
#define MaxVertexNum 10 /* 最大頂點數設為10 */
#define INFINITY 65535 /* ∞設為雙位元組無符號整數的最大值65535*/
typedef int Vertex; /* 用頂點下標表示頂點,為整型 */
typedef int WeightType; /* 邊的權值設為整型 */
typedef struct GNode *PtrToGNode;
struct GNode{
int Nv; /* 頂點數 */
int Ne; /* 邊數 */
WeightType G[MaxVertexNum][MaxVertexNum]; /* 鄰接矩陣 */
};
typedef PtrToGNode MGraph; /* 以鄰接矩陣儲存的圖型別 */
bool Visited[MaxVertexNum]; /* 頂點的訪問標記 */
MGraph CreateGraph(); /* 建立圖並且將Visited初始化為false;裁判實現,細節不表 */
void Visit( Vertex V )
{
printf(" %d", V);
}
void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) );
int main()
{
MGraph G;
Vertex V;
G = CreateGraph();
scanf("%d", &V);
printf("DFS from %d:", V);
DFS(G, V, Visit);
return 0;
}
/* 你的程式碼將被嵌在這裡 */
輸入樣例:
給定圖如下
5
輸出樣例:
DFS from 5: 5 1 3 0 2 4 6
我的程式碼
void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) ){
int i;
Visit(V);
Visited[V] = 1;
for(i = 0; i < Graph->Nv; i++){
if(Graph->G[V][i] == 1){
if(Visited[i] == false){
//Visited[i] = 1;
DFS(Graph, i, Visit);
}
}
}
}
DFS的模板
dfs(pos){
visit(pos);
vis[pos] = 1;
for(與pos相連的點i){
if(i未被訪問過)
dfs(i);
}
}
相關文章
- 圖的深度遍歷(C語言)鄰接矩陣表示C語言矩陣
- 14、圖-鄰接矩陣矩陣
- BFS求無權圖的單源最短路徑-鄰接矩陣儲存矩陣
- 鄰接矩陣、度矩陣矩陣
- python實現圖(基於圖的不同儲存方式)的深度優先(DFS)和廣度(BFS)優先遍歷Python
- C#實現圖的鄰接矩陣和鄰接表結構C#矩陣
- 第6章 圖的學習總結(鄰接矩陣&鄰接表)矩陣
- js實現深度優先遍歷和廣度優先遍歷JS
- 圖的遍歷:深度優先搜尋與廣度優先搜尋
- 深度優先遍歷,廣度優先遍歷實現物件的深拷貝物件
- 軟考筆記-有向圖的鄰接矩陣筆記矩陣
- 圖論系列之「深度優先遍歷及聯通分量」圖論
- 廣度優先遍歷圖解圖解
- 【Python】Python中的圖的鄰接矩陣轉化為字典格式Python矩陣
- 單詞接龍---快速建圖----雙向BFS(廣度優先遍歷)
- Python 圖_系列之基於鄰接炬陣實現廣度、深度優先路徑搜尋演算法Python演算法
- 圖的儲存與遍歷C++實現C++
- 用python深度優先遍歷解迷宮問題Python
- 寬度優先遍歷
- 圖論系列之「基於深度優先遍歷的尋路演算法 (Path) 」圖論演算法
- (C語言、資料結構)鄰接矩陣的初始化、邊的插入和輸出,以及鄰接矩陣的撤銷和邊的搜尋C語言資料結構矩陣
- python 實現二叉樹的深度&&廣度優先遍歷Python二叉樹
- 再來一篇深度優先遍歷/搜尋總結?
- THREE 矩陣優先原則和平移旋轉矩陣矩陣
- 從原始邊列表到鄰接矩陣Python實現圖資料處理的完整指南矩陣Python
- 演算法競賽——樹和圖的儲存與遍歷演算法
- dfs深度優先搜尋解決迷宮類問題(遍歷)
- 二分搜尋樹系列之[ 深度優先-層序遍歷 (ergodic) ]Go
- 二分搜尋樹系列之「深度優先-層序遍歷 (ergodic) 」Go
- 集合框架(List儲存字串並遍歷)框架字串
- 圖論系列之「廣度優先遍歷及無權圖的最短路徑(ShortPath)」圖論
- 資料結構筆記(一)——C語言實現鄰接矩陣儲存的無向圖,判斷是否為連通圖,並且實現最小生成樹Prim演算法資料結構筆記C語言矩陣演算法
- Node中的兩種遍歷方式-深度優先和廣度優先(附Node刪除檔案例子進行詳解)
- 陣列遍歷陣列
- 使用點陣圖演算法來優化簽到歷史儲存空間佔用演算法優化
- 每日一道演算法題之矩陣的Z字型遍歷演算法矩陣
- PTA 7-9 求矩陣每行元素的和矩陣
- Kotlin 鏈式儲存的二叉樹的建立、遍歷Kotlin二叉樹