使用 C++ STL 实现 DFS 算法
DFS Algorithm implementation using C++ STL
我最近学习了 DFS 算法并尝试使用 C++ 和 STL 来实现 concept.But 而 运行 使用 gcc 的代码它给了我一些 error.Could 有人请指教错误在哪里我这边已经完成了吗?
错误是
exited with code=3221225477 in 2.75 seconds
完整代码如下:
#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);
}
我在您的代码中发现了以下错误
#include <bits/stdc++.h>
。不要使用这个 header。使用所需的 C++ headers
using namespace std;
不要使用这个。使用限定名称
vector<int> adj[5];
从不,在任何情况下都不要使用纯 C-Style 数组。在你的情况下,你需要一个 vector 的向量
- 你的两个 vector/array 维度都是一到小。
您添加的边数最多为 5。但是您的 array/vector 只有 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
我最近学习了 DFS 算法并尝试使用 C++ 和 STL 来实现 concept.But 而 运行 使用 gcc 的代码它给了我一些 error.Could 有人请指教错误在哪里我这边已经完成了吗?
错误是
exited with code=3221225477 in 2.75 seconds
完整代码如下:
#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);
}
我在您的代码中发现了以下错误
#include <bits/stdc++.h>
。不要使用这个 header。使用所需的 C++ headersusing namespace std;
不要使用这个。使用限定名称vector<int> adj[5];
从不,在任何情况下都不要使用纯 C-Style 数组。在你的情况下,你需要一个 vector 的向量
- 你的两个 vector/array 维度都是一到小。
您添加的边数最多为 5。但是您的 array/vector 只有 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