我正在尝试实现 BFS 并通过边缘计算所有访问的节点。但是我的代码给了我 0 计数,除了第一个
I'am trying to implement BFS and count all the visited node through the edges. But my code giving me 0 count except the 1st one
在此代码中,我只想访问节点并计数边缘。这是第一次看起来不错,但是当我通过新的节点和边缘时,它会给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;
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;
}
您没有重置您使用的任何变量,例如邻接列表v
,level
和vis
。
您必须将它们重置为一些默认值,然后再处理其他图,因为先前图的值不需要。
您可以在每个输入之前简单地运行一个循环:
for(int i=0;i<N;i++)
{
v[i].clear();
vis[i]=0;
level[i]=-1;
}
相关文章:
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- 为什么我的最后一个 ELSE 条件无法正确执行
- 在我的第一个C++程序中需要一些帮助(简单)
- 无法使我的第一个Windows OpenGL窗口抬起并运行
- 我正在尝试在Visual Studio 2013中编写我的第一个"Hello World"代码。为什么我会收到"IntelliSense: no operator message"和"error C2
- 一个奇怪的字符出现在我的字符数组的第一个
- 我的第一个C 外观
- 如何与SQL Server 2008建立稳定的连接,并在C 中编码我的第一个CRUD操作
- 编译我的第一个c++程序时遇到问题
- 编译我的第一个C++程序时遇到问题
- 为什么我在尝试编译我的第一个 CORBA 服务器(使用 ACE/TAO ORB 实现)时遇到链接器错误
- 我的第一个 cin 被忽略了,它只接受第二个
- 当我超过第一个 getline() 的输入中的数组大小时,第二个 getline 或其他输入函数不起作用
- 为什么无论输入如何,我的第一个 "if" 语句都会执行?
- 为什么我的第一个 if 语句有效,但我的 else if 语句在它之后不起作用
- 问题与我的第一个CPP程序-头和源
- 我的第一个c++程序
- 我的第一个Qt应用,c++(小opencv)
- 我的第一个DLL有很多我不明白的编译错误
- 无法在visual c++ 2010中运行我的第一个Win32应用程序