C++邻接矩阵存储图的深度优先搜索

1. 在数据结构中对于图的存储主要有三种方式,分别为邻接矩阵,邻接表和边集,前两种比较常用,下面使用的是C++语言邻接矩阵来存储图并实现深度优先搜索遍历

2. 下面是具体的执行过程:

① 对于深度优先遍历邻接矩阵存储的图来说比较简单,只需要使用一个标记数组来标记当前的顶点是否已经被访问即可,从图的一个顶点开始寻找邻接点,也就是当前顶点与其他存在联系的顶点,每访问过一个顶点那么标记顶点已被访问

② 找到当前邻接点之后那么又从当前的邻接点出发继续寻找与当前的邻接点有关系的点,最终dfs搜索结束那么图中所有的顶点都已经被访问过了

图的例子如下:

测试数据如下:

6
7
0 1 1
0 2 2
0 3 4
1 2 5
2 4 9
2 5 6
4 5 2

3. 下面是具体的代码:

#include<stdio.h>
#include<iostream>
#include<queue>
#include<algorithm>
#define maxSize 100
#define INF 100000
using namespace std;
bool vis[maxSize] = {false}; 
int n, edges, G[maxSize][maxSize];
void dfs(int u){
	vis[u] = true;
	cout << u << " ";
	for(int v = 0; v < n; v++){
		if(vis[v] == false && G[u][v] != INF){
			dfs(v);	
		}
	}
}

int main(void){
	cout << "输入图中的顶点数: ";
	cin >> n;
	fill (G[0], G[0] + maxSize * maxSize, INF);
	cout << endl;
	cout << "输入图中的边数: ";
	cin >> edges;
	cout << endl << "输入图中的起始顶点, 结束顶点和边的权重: " << endl;
	int u = -1, v = -1, weight = -1;
	for(int i = 0; i < edges; i++){
		cin >> u >> v >> weight;
		G[u][v] = weight;
	}
	for(int i = 0; i < n; i++){
		if(vis[i] == false){
			dfs(0);
		}
	}
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/qq_39445165/article/details/93188994