前言:
这篇文章还是是为了帮助一些
像我这样的菜鸟
找到简单的题解
问题描述:
马上到寒假了,JXY准备去n大城市游玩。这些城市之间有些有航线,有些没有。由于JXY特别懒,现在他想请一个更蒟蒻的人AYX帮他查一下航线的数量,JXY在1号城市,由近到远输出所有他能游玩的城市编号。(小天才WQG提醒:请使用广度优先遍历)
输入描述
第一行:m和n,m代表城市数,n代表道路数量。
下面n行,每行两个数a、b,代表城市a、b之间有一条路。
输出描述
输出图的广度优先遍历
用例输入 1
5 5 1 2 1 3 1 5 2 4 3 5
用例输出 1
1 2 3 5 4
问题解析:
标准BFS代码
套用模板即可
上一题变一种输入而已
图的遍历 广度优先遍历(爱思创)_吾乃狙击神蛐的博客-CSDN博客
代码BFS部分:
queue<int> q;
void bfs(int x)
{
vis[x]=1;
q.push(x);//入队
while(!q.empty())//判空
{
int cur=q.front();//存储队首
for(int i=1;i<=n*2;i++)
{
if(g[cur][i]==1 && vis[i]==0)
{
q.push(i);
vis[i]=1;//打标记
}
}
if(q.front()!=1) cout<<"-"<<q.front();//输出答案
q.pop();//别忘了出队
}
cout<<endl;
return ;
}
完整代码:
#include<bits/stdc++.h>
using namespace std;
int g[1001][1001],vis[1001];
int n,m;
queue<int> q;
void bfs(int x)
{
vis[x]=1;
q.push(x);
while(!q.empty())
{
int cur=q.front();
for(int i=1;i<=n*2;i++)
{
if(g[cur][i]==1 && vis[i]==0)
{
q.push(i);
vis[i]=1;
}
}
if(q.front()!=1) cout<<" "<<q.front();
q.pop();
}
cout<<endl;
return ;
}
int main()
{
cin>>m>>n;
int x,y;
for(int i = 1 ; i <= n ;i++)
{
cin>>x>>y;
g[x][y]=1;
}
cout<<1;
bfs(1);
return 0;
}