无向图的广度优先遍历
程序员文章站
2022-05-20 19:35:29
...
问题:
给定一个无向图,输出其广度优先遍历顺序。
很常规的问题,有很多博主都写过这个问题了,借助队列来实现,基础的递归程序,来实现一下:
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
//显示
void bfsDisplay(int *b) {
cout << "根据广度优先算法的结果,遍历顺序为:" << endl;
for (int i = 0; i < 5; i++) {
if (i != 4) {
cout << b[i] << " --> ";
}
else {
cout << b[i] << endl;
}
}
cout << endl;
}
extern int i = 0;
//广度优先搜索
void bfs(int a[][5], int *b, int n, int *visited, queue<int> list) {
//参数说明:邻接矩阵、最终路径数组、当前访问哪个元素、访问数组、队列
if (list.empty()) {
return ;
}
b[i] = list.front();//记录访问路径
i++;
list.pop();
for (int i = 0; i < 5; i++) {
if (a[n][i] != 0 && visited[i] == 0) {
list.push(i);
visited[i] = 1; //记录访问
}
}
if (!list.empty()) {
bfs(a, b, list.front(), visited, list);
}
}
int main() {
int a[5][5] = {
{ 0,1,0,0,1 },
{ 1,0,0,1,0 },
{ 0,0,0,1,1 },
{ 0,1,1,0,0 },
{ 1,0,1,0,0 }
};
int b[5] = { -1,-1,-1,-1,-1};
int visited[5] = { 1,0,0,0,0 };
queue<int> list;//其方法有:push(m),pop(),front()分别是入队列、出队列、读取队头元素
list.push(0);
bfs(a,b,0,visited,list);
bfsDisplay(b);
system("pause");
return 0;
}
结果显示:
上一篇: npm详细总结