/*
显式图的深度优先、广度优先遍历
*/
#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);
}
}
}
图的深度优先、广度优先遍历(简要实现)
猜你喜欢
转载自blog.csdn.net/qq_41409120/article/details/84798915
今日推荐
周排行