我只是在C ++中实现了广度优先搜索,而不是将向量声明为bool
,而是将其声明为int
。这导致一个非常奇怪的观察。当我使用时int
,代码显示以下内容:
1
32763
-524268732
在整个代码中,我没有像第2个节点和第3个节点一样为变量提供任何值,因此我假设它们只是垃圾值,但是当我将向量初始化为时,为什么还会出现垃圾值呢?充满零??? 您可以检查以下代码:
#include <iostream>
#include <queue>
using namespace std;
queue<int> neigh;
vector< vector<int> > graph(3);
vector<int> flag(3, 0);
int main(void)
{
graph[0].push_back(1); graph[0].push_back(2);
graph[1].push_back(0); graph[1].push_back(2);
graph[2].push_back(0); graph[3].push_back(1);
neigh.push(0);
while(!neigh.empty())
{
int cur = neigh.front();
neigh.pop();
flag[cur] = 1;
for(int i = 0, l = graph[cur].size();i < l;i++)
{
if(!flag[graph[cur][i]])
neigh.push(graph[cur][i]);
}
}
for(int i = 0;i < 3;i++)
{
cout << flag[i] << endl;
}
}
好了,然后我只更改了一行代码,第7行,即声明和初始化flag
向量的那一行。
前:
vector<int> flag(3, 0);
后:
vector<bool> flag(3, false);
瞧!代码开始工作:
1 //The new output
1
1
所以,我的问题是,代码最初是什么问题?我相信这可能是我犯的某种错误,或者可能是我的bfs实现完全起作用的偶然机会...那么,真相是什么呢?我的(可能的)错误是什么?
您正在这里访问矢量:
graph[3].push_back(1);
目前,graph
只有三个要素。这导致不确定的行为。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句