#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
const int N = 10010 * 2;
int n, m, k;
int e[N], ne[N], idx, h[N];
int level[N];
bool st[N];
void add(int a, int b){
e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}
void bfs(int u)
{
memset(st, false, sizeof st);
queue<int> q;
q.push(u);
st[u] = true;
int maxlevel = -1;
memset(level, 0, sizeof level);
int ans = 0x3f;
while(q.size())
{
auto t = q.front();
q.pop();
int l = level[t];
if(l > maxlevel && t != u) ans = t;
else if(l == maxlevel) ans = min(ans, t);
for(int i = h[t]; ~i; i = ne[i])
{
int j = e[i];
if(!st[j])
{
st[j] = true;
q.push(j);
level[j] = l + 1;
}
}
}
if(ans == 0x3f) ans = 0;
cout << ans << endl;
}
int main()
{
memset(h, -1, sizeof h);
cin >> n >> m >> k;
while(m --)
{
int a, b;
cin >> a >> b;
add(a, b);
add(b, a);
}
while(k --)
{
int root;
cin >> root;
bfs(root);
}
}
L3-008喊山(BFS模板的应用)
最新推荐文章于 2022-12-01 10:40:35 发布
本文介绍了一个使用C++实现的Breadth First Search (BFS)算法,用于解决图中从根节点到其他节点的最短路径问题。通过输入节点数量、边的数量和查询次数,博主展示了如何构建邻接表,并演示了如何调用BFS函数来找到指定起点的最短路径。
摘要由CSDN通过智能技术生成