本题目要求输入一个无向无权图,求起点到终点的最少跳数。
输入格式:
读入3个整数n(100000<n<10000000),s和d,n表示边条数,s表示起点,d表示终点。然后读入n条边(以v1 v2的形式)。注:节点序号不一定连续。
输出格式:
一个整数,表示s到d的最少跳数。
输入样例:
在这里给出一组输入。例如:
11 0 8
0 1
0 2
0 3
1 4
2 4
3 5
4 6
4 7
5 7
6 8
7 8
输出样例:
在这里给出相应的输出。例如:
4
#include<bits/stdc++.h>
using namespace std;
const int maxn = 10000000 + 10;
vector<vector<int>>v(maxn);
bool vis[maxn];
int n, s, d, A, B;
void BFS()
{
queue<pair<int, int>>Q;
for (auto i : v[s])
Q.emplace(i, 1);
while (!Q.empty())
{
auto x = Q.front();
vis[x.first] = true;
for (auto i : v[x.first])
{
if (i == d)
{
cout << x.second + 1 << endl;
return;
}
if (!vis[i])
{
Q.emplace(i, x.second + 1);
vis[i] = true;
}
}
Q.pop();
}
}
int main()
{
cin >> n >> s >> d;
while (n--)
{
cin >> A >> B;
v[A].emplace_back(B);
v[B].emplace_back(A);
}
BFS();
return 0;
}