我最近学习了DFS算法并尝试使用C ++和STL概念实现。但是在使用gcc运行代码时,这给了我一些错误。有人可以建议我到底在哪里出错了吗?
错误是
在2.75秒内以代码= 3221225477退出
请在下面找到完整的代码:
#include <bits/stdc++.h>
using namespace std;
void addEdge(vector<int> adj[], int u, int v)
{
adj[u].push_back(v); //singly linked ,not bidirectional
}
void DFS(vector<int> adj[], int v, vector<bool> &vis)
{
vis[v] = true;
cout << v << " ";
//for(int i=0;i<adj[v].size() ; i++)
for (auto i : adj[v])
{
//if(!vis[adj[v][i]])
if (vis[i] == false)
DFS(adj, i, vis);
}
}
int main()
{
vector<int> adj[5];
vector<bool> visited(5, false);
addEdge(adj, 1, 2);
addEdge(adj, 1, 3);
addEdge(adj, 2, 4);
addEdge(adj, 3, 5);
addEdge(adj, 4, 5);
DFS(adj, 1, visited);
}
答案 0 :(得分:2)
我在您的代码中发现了以下错误
#include <bits/stdc++.h>
。不要使用此标头。使用所需的C ++标头using namespace std;
请勿使用。使用合格的名称vector<int> adj[5];
永远不要在任何情况下都不使用纯C样式数组。在您的情况下,您需要向量的向量您最多可以添加5个边号。但是您的数组/向量只有5个元素。在C ++中,数组索引从0开始计数。因此,具有5个元素的向量v具有元素v [0],v [1],v [2],v [3],v [4]。如果您尝试访问索引5,将出现超出范围的错误。该程序将崩溃。
std::vector
的at()函数也将成为您的朋友。
只需增加数组大小即可。
vector<int> adj[6]; // 6 elements needed
vector<bool> visited(6, false); // 6 elements needed