我编写了以下C ++程序来实现广度优先搜索来解决this从源查找所有节点的最短路径的问题。
#include<iostream>
#include<vector>
#include<string.h>
#include<queue>
using namespace std;
int main()
{
int test;
cin >> test;
while(test--)
{
int m,n,source;
cin >> n >> m;
bool visited[n+1];
int dist[1001];
queue<int> q;
memset(dist, -1, sizeof(dist));
vector<int> adj[1001];
for(int i = 0; i < m; i++)
{
int a, b;
cin >> a >> b;
adj[a].push_back(b);
adj[b].push_back(a);
}
cin >> source;
dist[source] = 0;
visited[source] = true;
q.push(source);
while(q.size())
{
int v = q.front();
q.pop();
for(int i : adj[v])
{
if(!visited[i])
{
q.push(i);
dist[i] = dist[v] + 6;
visited[i] = true;
}
}
}
for(int i = 1; i <= n; i++)
{
if(i != source)
{
cout << dist[i] << " ";
}
}
cout << "\n";
}
}
如果test的值为1,则效果很好,但当值为2或更大时,布尔数组的某些值&#34;访问&#34;在第二次和后来的迭代中变为1。我不明白为什么以及如何发生,因为我在每次迭代中声明了布尔数组,并且其元素的默认值为0.有人可以解释一下。
答案 0 :(得分:3)
我在每次迭代中声明了布尔数组,其元素的默认值为0。
不,它不是0.C ++简单类型没有默认值。我打赌你可以得到一些随机值,因为你的数组没有自动初始化。
答案 1 :(得分:1)
您没有初始化数组,并且本地数组未初始化为零,因此需要进行显式初始化。