我正在编写用于在无向图中查找循环的代码,但是尽管我已经声明了名为“ vis”的数组,但仍存在编译错误。
int dfs(vector<int> adj[], int v, bool[] &vis) {
vis[v]=true;
for(int x : adj[v]){
if(vis[x]==true) return 1;
vis[x] = true;
dfs(adj, x, vis);
}
return 0;
}
bool isCyclic(vector<int> adj[], int V) {
// Your code here
bool vis[V];
cout << dfs(adj, V, vis);
}
出现以下错误:-
prog.cpp:11:40: error: expected ',' or '...' before '&' token int dfs(vector<int>adj[],int v ,bool[] &vis){ prog.cpp: In function 'int dfs(std::vector<int>*, int, bool*)': prog.cpp:12:5: error: 'vis' was not declared in this scope vis[v]=true;
答案 0 :(得分:0)
将bool[]
传递给函数就足够了。 bool[]
实际上是bool*
,通过它您可以修改数组中的元素。
答案 1 :(得分:0)
这里有多个问题。我认为关于数组如何工作以及它们的语法是什么感到困惑。
默认情况下,原始数组通过引用传递。与普通变量不同,传递时不复制数组。
实际上,接收指针或数组的函数是等效的:
void frob(bool a[]); // both equivalent.
void frob(bool* a); // same function.
因此,将您的功能更改为此签名应该可以轻松工作:
int dfs(vector<int> adj[], int v, bool vis[]) {
// ...
}
此外,运行时大小的数组也不是标准功能。您应该改用向量。
// V is not constexpr, you should use vector
bool vis[V];
以下是构建和传递矢量的方法:
int dfs(vector<int> adj[], std::vector<bool>& vis) {
int v = vis.size();
// ...
}
bool isCyclic(vector<int> adj[], int V) {
// Your code here
std::vector<bool> vis(V);
cout << dfs(adj, vis);
}