bfs的时候这种层数可能最好写在结构体里面。
有一个样例超时了。然后把邻接矩阵改成邻接表就可以了。
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <vector>
#include <string.h>
#include <queue>
#include <map>
using namespace std;
const int maxn = 1010;
//int aj[maxn][maxn] = {0};
vector<int> fans[maxn];
int N,L;
int vis[maxn];
int level[maxn] = {0};
void bfs(int cur)
{
vis[cur]=1;
level[cur]=0;
queue<int> q;
q.push(cur);
int tot = 0;
while(!q.empty())
{
int tmp = q.front();
q.pop();
//cout<<tmp<<endl;
tot++;
if(level[tmp]==L)
continue;
int n = fans[tmp].size();
for(int i=0;i<n;i++)
{
int zz = fans[tmp][i];
if(vis[zz]==0)
{
vis[zz]=1;
level[zz] = level[tmp] + 1;
q.push(zz);
}
}
}
//cout<<"------------------------"<<endl;
cout<<tot-1<<endl;
return ;
}
int main()
{
int i,j,k,tmp;
scanf("%d%d",&N,&L);
for(i=1;i<=N;i++)
{
scanf("%d",&k);
for(j=0;j<k;j++)
{
scanf("%d",&tmp);
fans[tmp].push_back(i);
}
}
scanf("%d",&k);
for(i=0;i<k;i++)
{
scanf("%d",&j);
memset(vis,0,sizeof(vis));
memset(level,0,sizeof(level));
bfs(j);
}
return 0;
}

本文探讨了在广度优先搜索(BFS)算法中使用邻接表替代邻接矩阵以提高效率的方法。通过实例展示了如何在C++中实现这一优化,并分享了在特定层数下进行BFS操作的具体代码实现。
546

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



