在无向图代码中检测周期时出错

问题描述

#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在一起,而不是第一个具有误导性的缩进。根据需要添加大括号。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...