資料結構 鄰接矩陣儲存圖的深度優先遍歷
練習6.1 鄰接矩陣儲存圖的深度優先遍歷 (20 point(s))
試實現鄰接矩陣儲存圖的深度優先遍歷。
函式介面定義:
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
標準的深度優先搜尋演算法
#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; } /* 你的程式碼將被嵌在這裡 */ void DFS(MGraph Graph, Vertex V, void(*Visit)(Vertex)) { Visited[V] = true; Visit(V); for (int i = 0; i < Graph->Nv; i++) { if (Graph->G[V][i] != INFINITY && Visited[i]) DFS(Graph, i, Visit); } }
相關推薦
資料結構 鄰接矩陣儲存圖的深度優先遍歷
練習6.1 鄰接矩陣儲存圖的深度優先遍歷 (20 point(s)) 試實現鄰接矩陣儲存圖的深度優先遍歷。 函式介面定義: void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) ); 其中MGraph是鄰
資料結構 鄰接矩陣儲存圖的深度優先遍歷
練習6.1 鄰接矩陣儲存圖的深度優先遍歷 (20 point(s)) 試實現鄰接矩陣儲存圖的深度優先遍歷。 函式介面定義: void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) ); 其中MGraph是鄰接矩
小朋友學資料結構(16):基於鄰接矩陣的的深度優先遍歷和廣度優先遍歷
觀察下面兩個無向圖: 這兩個圖其實是一樣的,只是畫法不同罷了。第一張圖更有立體感,第二張圖更有層次感,並且把A點置為頂點(事實上圖的任何一點都可以做為頂點)。 一、用陣列來存放頂點 vexs[0] = ‘A’ vexs[1] = ‘B’ vexs[2] = ‘C’ ve
java 圖的鄰接矩陣表示,深度優先遍歷,廣度優先遍歷
1 . 建立圖的鄰接矩陣資料結構 public class MGraph { /*圖的鄰接矩陣表示*/ int vexs; //圖中結點數目 char data[]; //存放結點資料 int [][]weight; /
用鄰接矩陣實現的深度優先遍歷和廣度優先遍歷
using ++ while ext empty type push mat ron 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <queue> 4
資料結構實踐——迷宮問題之圖深度優先遍歷解法
【專案 - 迷宮問題之圖深度優先遍歷解法】 設計一個程式,採用深度優先遍歷演算法的思路,解決迷宮問題。 (1)建立迷宮對應的圖資料結構,並建立其鄰接表表示。 (2)採用深度優先遍歷的思路設計演算法,輸出從入口(1,1)點到出口(M,N
無向圖-鄰接連結串列的深度優先遍歷-DFS
一、DFS思想本演算法以無向網為例,儲存方式採用鄰接連結串列1)將該網以鄰接連結串列的方式儲存2)選取A點為起始點,訪問此頂點,用一個visit的bool型陣列記錄訪問狀態(false表示未被訪問,true表示已訪問)3)從A的未被訪問的鄰接點出發,深度優先遍歷圖,直到圖中所
圖深度優先遍歷的非遞迴實現
採用非遞迴方法實現圖的深度優先遍歷 // // GraphDFSNonRecursion.c // // // Created by yanbinbin // #include <stdio.h> #include <stdlib.h>
圖 深度優先遍歷 廣度優先遍歷 非遞迴遍歷 圖解演算法過程
圖的鄰接矩陣表示 通常圖的表示有兩種方法:鄰接矩陣,鄰接表。 本文用鄰接矩陣實現,一是程式碼量更少,二是程式碼風格也更貼近C語言。但不論是圖的哪種實現方式,其基本的實現思想是不變的。 1:節點的資訊,我們用一維陣列a[n]來儲存,假設圖共有n個節點。 2:節點與節點間的關係
無向圖 深度優先遍歷 c語言實現
無向圖的深度優先遍歷的實現,無向圖用鄰接表表示無向圖的表示:鄰接矩陣和鄰接表。 程式使用的示例圖為: 實現要點: 每個節點有三種狀態: -1,還未發現 0,已經發現了,正在處理,還沒有處理
迷宮問題之圖深度優先遍歷解法
*Copyright (c)2017,煙臺大學計算機與控制工程學院 *All rights reserved. *檔名稱: *作 者:李佳駿
關於鄰接表和其深度優先遍歷、廣度優先遍歷的問題
如果有一個鄰接表儲存的圖,以0點出發,深度優先遍歷和廣度優先遍歷。 鄰接表為: [0]->[1]->[5]->[6]->END [1]->[0]->[2]->END [2]->[1]->[3]->END [3]-&
資料結構——PTA 鄰接矩陣儲存圖的深度優先遍歷、鄰接表儲存圖的廣度優先遍歷
廣度優先與深度優先是遍歷圖的兩種基本方法,大致的思想是DFS為遞迴,而BFS是佇列。 這裡給出PTA兩道題目的答案,方法很基本,但第三個形參還是第一次見,去網上搜了搜給出的說法是呼叫函式的地址,但個人感覺就是呼叫這個函式。。。 下面給出兩段程式碼 void BFS ( LGraph
C語言實現圖的鄰接矩陣儲存結構及深度優先遍歷和廣度優先遍歷
DFS的核心思想在於對訪問的鄰接節點進行遞迴呼叫;BFS的核心思想在於建立了一個鄰接節點的佇列。 在Dev C++中除錯執行通過。 用下圖進行了測試。 #include <stdio.h> #define MaxVertexNum 50 #defin
資料結構與演算法(Java描述)-20、圖、圖的鄰接矩陣、有向圖的廣度優先遍歷與深度優先遍歷
一、圖的基本概念圖:是由結點集合及結點間的關係集合組成的一種資料結構。結點和邊:圖中的頂點稱作結點,圖中的第i個結點記做vi。有向圖: 在有向圖中,結點對<x ,y>是有序的,結點對<x,y>稱為從結點x到結點y的一條有向邊,因此,<x,y>與<y,x>是兩條不同的邊。有向圖
6-1 鄰接矩陣儲存圖的深度優先遍歷 (20 分)
試實現鄰接矩陣儲存圖的深度優先遍歷。 函式介面定義: void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) ); 其中MGraph是鄰接矩陣儲存的圖,定義如下: typedef struct GNode *PtrToG
6-1 鄰接矩陣儲存圖的深度優先遍歷 (20 分) 第七章--圖--基本概念-計算機17級
6-1 鄰接矩陣儲存圖的深度優先遍歷 (20 分) 試實現鄰接矩陣儲存圖的深度優先遍歷。 函式介面定義: void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) ); 其中MGraph是鄰接矩陣儲存的圖
資料結構 圖的優先遍歷(鄰接矩陣)
資料結構 #include <iostream> using namespace std; #define maxsizes 105 typedef int Type; // 頂點定義 typedef struct{ Ty
1-7 鄰接矩陣儲存圖的深度優先遍歷 (10 分)
試實現鄰接矩陣儲存圖的深度優先遍歷。 函式介面定義: void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) ); 其中MGraph是鄰接矩陣儲存的圖,定義如下: typedef struct GNode *PtrToGNod
資料結構---圖的鄰接表(建立、列印、深度優先遍歷,廣度優先遍歷C語言)
當一個圖為稀疏圖時,使用鄰接矩陣會浪費大量儲存空間。 鄰接表法結合了順序儲存和鏈式儲存方法,減少了不必要的浪費。 鄰接表 1)對圖G的每個頂點vi建立一個單鏈表,第i個單鏈表中的結點表示依附於頂點vi的邊(對於有向圖則是以頂點vi為尾的弧)。這個單鏈表就稱為頂點vi