圖的鄰接矩陣及遍歷
/***************************************************************************** DataStruct Of Graph ******************************************************************************/ #include <iostream> #include <queue> #include <stack> using namespace std; #include "stdafx.h" const int MaxSize = 10; template <class DataType> class MGraph { private: int i,j,k; DataType vertex[MaxSize]; int arc[MaxSize][MaxSize]; int vertexNum,arcNum; int visited[MaxSize]; public: MGraph(DataType a[],int n,int e); ~MGraph(){} void DFSTraverse(int v); void DFSN0Recursion(int v); void BFSTraverse(int v); }; template <class DataType> MGraph<DataType>::MGraph(DataType a[],int n,int e){ vertexNum = n;arcNum = e; memset(visited,0,sizeof(visited)); for(i=0;i<vertexNum;i++) vertex[i]=a[i]; for(i=0;i<vertexNum;i++) for(j=0;j<vertexNum;j++) arc[i][j]=0; for(k=0;k<arcNum;k++){ cin>>i>>j; arc[i][j]=1; arc[j][i]=1; } } /////////////////////////////////////圖的鄰接矩陣深度遞迴遍歷//////////////////////////////////////////////// template <class DataType> void MGraph<DataType>::DFSTraverse(int v){ cout<<vertex[v]; visited[v]=1; for(j=0;j<vertexNum;j++) if(arc[v][j]==1&&visited[j]==0) DFSTraverse(j); } ///////////////////////////////////////圖的鄰接矩陣深度非遞迴遍歷///////////////////////////////////////////////// template <class DataType> void MGraph<DataType>::DFSN0Recursion(int v){ memset(visited,0,sizeof(visited)); i=0; stack<int> stack; cout<<vertex[v]; visited[v]=1; stack.push(v); while(1){ while(i<=vertexNum){ if(visited[i]==0&&arc[v][i]==1){ cout<<vertex[i]; stack.push(i); visited[i]=1; v=i; i=0; }else{ i++; } } stack.pop(); if(!stack.empty()){ v=stack.top(); }else{ return; } } } ///////////////////////////////////////////鄰接矩陣廣度非遞迴遍歷/////////////////////////////////// template <class DataType> void MGraph<DataType>::BFSTraverse(int v){ memset(visited,0,sizeof(visited)); queue<int> queue; cout<<vertex[v]; visited[v]=1; queue.push(v); while(1){ for(i=0;i<vertexNum;i++){ if(arc[v][i]==1&&visited[i]==0){ cout<<vertex[i]; queue.push(i); visited[i]=1; } } queue.pop(); if(!queue.empty()){ v = queue.front(); }else{ return; } } } ///////////////////Main.cpp/////////////// // MGraph.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include "GMraph.h" int _tmain(int argc, _TCHAR* argv[]) { int a[]={1,2,3,4},n=4,e=2; MGraph<int> mgraph(a,n,e); mgraph.DFSTraverse(0); cout<<endl<<"-----------------------我是萬惡的分割線------------------"<<endl; mgraph.DFSN0Recursion(0); cout<<endl<<"-----------------------我是萬惡的分割線------------------"<<endl; mgraph.BFSTraverse(0); return 0; }
相關推薦
圖的鄰接矩陣及遍歷
/***************************************************************************** DataStruct Of Graph **************************************
資料結構作業——圖的儲存及遍歷(鄰接矩陣、鄰接表+DFS遞迴、非遞迴+BFS)
鄰接矩陣存圖 /* * @Author: WZY * @School: HPU * @Date: 2018-11-02 18:35:27 * @Last Modified by: WZY * @Last Modified time: 2018-11-0
圖的表示及遍歷
1. 圖的表示 1)臨接矩陣 使用二維陣列arr[N][N]表示一個圖。 a. N 為圖的頂點個數,矩陣的對角線全為0。 b. 兩個頂點連通的話,矩陣的值為1 c. 某一行的和表示該頂點的出度。某一列的和表示該頂點的入度 d. 有權值的圖,矩陣元素不再是0,1表示是否連通,而是把元素值表示為權值。
廣度優先搜尋BFS 之圖的構造及遍歷
1. 由給定的頂點和邊的資訊構造圖的鄰接矩陣儲存; 對該圖進行深度優先搜尋,輸出搜尋得到的結點序列; 3. 以鄰接表作儲存結構,用克魯斯卡爾演算法構造最小生成樹。 /* 5 6 abcde 0 1 10 0 3 20 1 2 30 1 4 40 2 3 50 2 4 6
鄰接矩陣存圖及遍歷——————資料結構作業
實現 鄰接矩陣存圖 DFS遞迴遍歷 DFS非遞迴遍歷 BFS遞迴遍歷 #include<cstdio> #include<cstring> #include<queue> #include<stack>
圖的鄰接矩陣儲存及遍歷
這裡採用圖的鄰接矩陣儲存(即為二維陣列) 遍歷:DFS和BFS #include<cstdio> #include<iostream> #include<cstring> #include<queue> using namespace s
鄰接連結串列存圖及遍歷——————資料結構作業
實現 鄰接連結串列存圖 DFS遞迴遍歷 DFS非遞迴遍歷 BFS遞迴遍歷 #include<bits/stdc++.h> using namespace std; const int MAXN = 1e4; vector<int
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是鄰接矩陣儲存的圖
資料結構——PTA 鄰接矩陣儲存圖的深度優先遍歷、鄰接表儲存圖的廣度優先遍歷
廣度優先與深度優先是遍歷圖的兩種基本方法,大致的思想是DFS為遞迴,而BFS是佇列。 這裡給出PTA兩道題目的答案,方法很基本,但第三個形參還是第一次見,去網上搜了搜給出的說法是呼叫函式的地址,但個人感覺就是呼叫這個函式。。。 下面給出兩段程式碼 void BFS ( LGraph
資料結構 鄰接矩陣儲存圖的深度優先遍歷
練習6.1 鄰接矩陣儲存圖的深度優先遍歷 (20 point(s)) 試實現鄰接矩陣儲存圖的深度優先遍歷。 函式介面定義: void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) ); 其中MGraph是鄰
資料結構——圖的儲存與遍歷(鄰接矩陣)
圖的儲存與遍歷(鄰接矩陣) #include<stdio.h> #include<stdlib.h> #define MAXVEX 20 /*最大頂點個數*/ #define INFINITY 32767
圖的深度優先遍歷(鄰接矩陣,遞迴,非遞迴)
參考部落格:圖的深度優先遍歷(遞迴、非遞迴;鄰接表,鄰接矩陣) 本篇預設連通圖,非連通情況會在鄰接表處補上 1.鄰接矩陣的遞迴解法 #include<stdio.h> #define MAX 100 typedef struct { int e[MAX][MA
1-7 鄰接矩陣儲存圖的深度優先遍歷 (10 分)
試實現鄰接矩陣儲存圖的深度優先遍歷。 函式介面定義: void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) ); 其中MGraph是鄰接矩陣儲存的圖,定義如下: typedef struct GNode *PtrToGNod
C語言實現鄰接矩陣建立無向圖&圖的深度優先遍歷
/* '鄰接矩陣' 實現無向圖的建立、深度優先遍歷*/ #include <stdio.h> #include <stdlib.h> #define MaxVex 100 //最多頂點個數 #define INFINITY 32768
資料結構與演算法(Java描述)-20、圖、圖的鄰接矩陣、有向圖的廣度優先遍歷與深度優先遍歷
一、圖的基本概念圖:是由結點集合及結點間的關係集合組成的一種資料結構。結點和邊:圖中的頂點稱作結點,圖中的第i個結點記做vi。有向圖: 在有向圖中,結點對<x ,y>是有序的,結點對<x,y>稱為從結點x到結點y的一條有向邊,因此,<x,y>與<y,x>是兩條不同的邊。有向圖
圖的廣度優先遍歷BFS(鄰接矩陣實現)c語言
廣度優先遍歷也叫廣度優先搜尋(Breadth First Search)。它的遍歷規則:先訪問完當前頂點的所有鄰接點。先訪問的頂點的鄰接點先於後訪問頂點的鄰接點被訪問。演算法思想:使用佇列的資料結構(FIFO (First In First Out)),將一個頂點加入佇列,然
圖的廣度優先遍歷(鄰接矩陣)
廣度優先遍歷是連通圖的一種遍歷策略。其基本思想如下: 1、從圖中某個頂點V0出發,並訪問此頂點; 2、從V0出發,訪問V0的各個未曾訪問的鄰接點W1,W2,…,Wk;然後,依次從W1,W2,…,Wk出發訪問各自未被訪問的鄰接點; 3、重複步驟2,直到全部頂
無向圖-鄰接矩陣-寬度優先遍歷-BFS C程式碼實現
一、BFS演算法思路本演算法以無向圖為例,儲存方式採用鄰接矩陣1)將該網以鄰接矩陣的方式儲存,由於這裡的示例採用無向圖,因此它是一個對稱陣2)選取A點為起始點,訪問此頂點,用一個visit的bool型陣列記錄訪問狀態(false表示未被訪問,true表示已訪問)3)從A的未被
基於鄰接矩陣的無向圖的廣度優先遍歷
輸入第一行為整數n(0 < n < 100),表示資料的組數。 對於每組資料,第一行是兩個整數k,m(0 < k < 100,0 < m < k*k),表示有m條邊,k個頂點。 下面的m行,每行是空格隔開的兩個整數u,v,表示一條連線u,v頂點的無向邊。