是否存在路径(FIFOBB算法)
题目描述
一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。
输入
第一行两个整数,分别表示n 和 e 的值(1 <= n <= 2 * 10^5, 0 <= e <= 2 * 10^5);
下面e行,每行两个整数,分别表示一条边的两个顶点;
最后一行两个整数,分别表示 source 和 destination的值。
输出
若存在从顶点 source到顶点 destination的路径,则输出true;否则,输出false。
样例输入 Copy
3 3
0 1
1 2
2 0
0 2
样例输出 Copy
true
#include<bits/stdc++.h>
using namespace std;
int n,e;
int main ()
{cin>>n>>e;vector<vector<int>> graph(n);for(int i=0;i<e;i++){int u,v;cin>>u>>v;graph[u].push_back(v);graph[v].push_back(u);}int s,d;cin>>s>>d;if(s==d){cout<<"true"<<endl;return 0;}vector<bool>visited(n,false);queue<int>q;q.push(s);visited[s]=true;while(!q.empty()){int current=q.front();q.pop();for(int i=0;i<graph[current].size();i++){int jb=graph[current][i];if(!visited[jb]){if(jb==d){cout<<"true"<<endl;return 0;}visited[jb]=true;q.push(jb);}}}cout<<"false"<<endl;return 0;
}
//by crtzk7