图的深度优先、广度优先遍历(简要实现)

/*
	显式图的深度优先、广度优先遍历	 
*/

#include<iostream>
using namespace std;

#define N 10
int edge[N][N] = {{0}, {0, 0, 1, 0, 1}, {0, 1, 0, 0, 0}, 
					{0, 0, 0, 0, 1}, {0, 1, 0, 1, 0}};// 图 
int vertexName[N] = {0, 1, 2, 3, 4};// 顶点 
int visited[N] = {0};// 标记图中元素的访问状态

void BFS(int k);
void DFS(int k);
					
int main() {
	DFS(1);

	return 0;
}

// 广度优先 
void BFS(int k) {
	int queue[N];// 队列 
	int front = 0, rear = 0;// 队首和队尾
	visited[k] = 1;
	cout << vertexName[k] << " ";
	queue[rear++] = k;// 入队
	while (front != rear) {
		int frontData = queue[front++];// 获取队首元素 
		for (int i = 1; i <= 4; i++) {
			if (edge[frontData][i] == 1 && visited[i] == 0) {
				cout << vertexName[i] << " ";
				visited[i] = 1;// 修改访问标记 
				queue[rear++] = i;
			} 
		}
	}
}

// 深度优先 
void DFS(int k) {
	cout << vertexName[k] << " ";
	visited[k] = 1; 
	for (int i = 1; i <= 4; i++) {
		if (edge[k][i] == 1 && visited[i] == 0) {
			DFS(i);
		}
	} 
} 
发布了19 篇原创文章 · 获赞 5 · 访问量 4208

猜你喜欢

转载自blog.csdn.net/qq_41409120/article/details/84798915