

\quad这个一个标准的图BFS的过程,从图中给定的一个顶点u开始,记录与u距离(层数)不超过L的顶点个数,用队列模拟BFS即可。
#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
const int maxn = 1001;
vector<int> E[maxn];
int vis[maxn];
int BFS(int i, int L)
{
int res = 0;
queue<int> q;
q.push(i);
vis[i] = 1;
q.push(-1);
int layer = 0;
while(!q.empty())
{
int u = q.front();
q.pop();
if(u==-1) break;
res++;
for (int i = 0; i < E[u].size(); ++i){
int v = E[u][i];
if(vis[v]==0){
q.push(v);
vis[v] = 1;
}
}
if(q.front()==-1){
if(layer==L) return res;
layer++;
q.pop();
q.push(-1);
}
}
return res;
}
int main(int argc, char const *argv[])
{
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
int N, L; cin >> N >> L;
for (int i = 1; i <= N; ++i){
int num, temp; cin >> num;
while(num--) cin >> temp, E[temp].push_back(i);
}
int K, temp; cin >> K;
while(K--)
{
cin >> temp;
memset(vis, 0, sizeof(vis));
cout << BFS(temp, L)-1 << endl; // 除去自身这个点,故要减1
}
return 0;
}
本文详细介绍了使用广度优先搜索(BFS)算法遍历图的过程,重点讲解了如何从指定顶点开始,寻找距离该顶点不超过特定层级的所有顶点,并通过队列模拟实现BFS。同时,提供了完整的C++代码示例,展示了如何读取图结构并应用BFS算法。
322

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



