布尔数组获取意外的默认值

时间:2016-01-31 13:16:29

标签: c++ arrays breadth-first-search

我编写了以下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.有人可以解释一下。

2 个答案:

答案 0 :(得分:3)

  

我在每次迭代中声明了布尔数组,其元素的默认值为0。

不,它不是0.C ++简单类型没有默认值。我打赌你可以得到一些随机值,因为你的数组没有自动初始化。

答案 1 :(得分:1)

您没有初始化数组,并且本地数组未初始化为零,因此需要进行显式初始化。