#include<iostream>
#include<queue>
using namespace std;
int visited[51]; //记住已经访问过的顶点。顶点数大于50的话,要增大数组长度。
int arc[51][51]; //记住各条边
//int n;
void bfs(int v,int n){ //v代表起点,n代表数组长度,若把n设置为全局变量,则改成 bfs(int v)即可
queue<int>q;
q.push(v); //起点入队
visited[v]=true; //记住起点已经访问过
while(!q.empty()){ //反复循环,直至队列为空
v=q.front(); //取出队首v
q.pop();
cout<<v<<" "; //访问v顶点
for(int i=0;i<n;i++){ //找到v顶点的所有邻居,把没有访问过邻居的入队 \\ int=0;代表0号顶点存在
if(arc[v][i]==1&&visited[i]==false){
visited[i]=true;
cout<<i<<" ";
q.push(i);
}
}
}
}
int main( ) {
int n;
cin>>n;
//读入邻接矩阵
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){ //注意:这里的i,j是从零开始,则广搜时也需要从零开始
cin>>arc[i][j]; //从[0][0]开始存储,也从visitde[0]开始存储
}
}
//广搜
bfs(0,n);
return 0;
}
R6-1 邻接表存储图的广度优先遍历
试实现邻接表存储图的广度优先遍历

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



