问题描述
#include<bits/stdc++.h>
using namespace std;
bool iscycle(list<int> *adj,bool *visited,int i,int parent){
visited[i] = true;
for(auto j : adj[i]){
if(!visited[j])
if(iscycle(adj,visited,j,i))
return true;
else if(j != parent)
return true;
}
return false;
}
bool solve(vector<vector<int>> vect,int v){
list<int> *adj = new list<int>[v];
int i;
for(i = 0;i < vect.size();i++){
adj[vect[i][0]].push_back(vect[i][1]);
adj[vect[i][1]].push_back(vect[i][0]);
}
bool *visited = new bool[v];
for(i = 0;i < v;i++)
visited[i] = false;
int parent = -1;
for(i = 0;i < v;i++)
if(!visited[i]){
parent = -1;
if(iscycle(adj,i,parent))
return true;
}
return false;
}
int main(){
std::vector<vector<int>> vect{{0,1},{1,2},{2,3}};
cout<<solve(vect,4)<<endl;
return 0;
}
在某些测试情况下,例如在有4个顶点且每两个顶点按照向量“ vect”指定的方式连接时,此用于检测无向图中的循环的代码将失败。对于此特定测试用例,答案应为0(即未检测到周期),但正在生成的答案代码为1。我无法理解什么是错误。
解决方法
else
中的iscycle
与第二个最里面的if
在一起,而不是第一个具有误导性的缩进。根据需要添加大括号。