C++ I';我正在尝试实现BFS,并计算通过边缘访问的所有节点。但是我的代码给了我0个计数,除了第一个
在这段代码中,我只想访问节点并计算边。这是第一次,它看起来不错,但当我传递新节点和边时,它给出了0计数。我发现它的条件对于下一个节点和边不是真的。这是我第一次实现BFSC++ I';我正在尝试实现BFS,并计算通过边缘访问的所有节点。但是我的代码给了我0个计数,除了第一个,c++,graph-algorithm,breadth-first-search,C++,Graph Algorithm,Breadth First Search,在这段代码中,我只想访问节点并计算边。这是第一次,它看起来不错,但当我传递新节点和边时,它给出了0计数。我发现它的条件对于下一个节点和边不是真的。这是我第一次实现BFS #include<bits/stdc++.h> using namespace std; vector<int>v[1000]; int level[1000]; bool vis[1000]; void bfs(int s,int E) { int count=0; queue<int>q;
#include<bits/stdc++.h>
using namespace std;
vector<int>v[1000];
int level[1000];
bool vis[1000];
void bfs(int s,int E)
{
int count=0;
queue<int>q;
q.push(s);
level[s]=0;
vis[s]=true;
while(!q.empty())
{
int p=q.front();
q.pop();
for(int i=0;i<v[p].size();i++)
{
if(vis[v[p][i]] == false)
{
level[v[p][i]] = level[p]+1;
q.push(v[p][i]);
vis[v[p][i]] = true;
count++;
}
}
}
cout<<count<<endl;
}
int main()
{
int N,E,x,y,size;
while(scanf("%d %d",&N,&E)==2)
{
for(int i=1;i<=E;i++)
{
scanf("%d %d",&x,&y);
v[x].push_back(y);
v[y].push_back(x);
}
int s=0;
bfs(s);
}
return 0;
}
#包括
使用名称空间std;
向量[1000];
整数级[1000];
布尔-维斯[1000];
无效bfs(内部s,内部E)
{
整数计数=0;
queueq;
q、 推;
级别[s]=0;
vis[s]=真;
而(!q.empty())
{
int p=q.front();
q、 pop();
对于(int i=0;i您没有重置您使用过的任何变量,如邻接列表v
,级别
和vis
在处理其他图形之前,必须将它们重置为某个默认值,因为以前图形的值是不需要的
您只需在每个输入之前运行一个循环:
for(int i=0;i<N;i++)
{
v[i].clear();
vis[i]=0;
level[i]=-1;
}
for(int i=0;iYes)。它成功了。谢谢