我寫了下面的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";
}
}
它運作良好,如果測試的值是1,而當值是2或更大時,布爾數組的某些值「已訪問」成爲1在第二和後面的迭代。我不明白爲什麼以及如何發生,因爲我在每次迭代中聲明瞭布爾數組,其元素的默認值爲0.有人可以解釋一下。
雖然有些編譯器接受它們作爲擴展名,但可變長度數組(如''visited')是無效的C++。 –