C ++ - 图形循环检测avaliation

时间:2017-01-13 23:06:10

标签: c++ graph depth-first-search cyclic

我正在研究图形,我用C ++完成了我的递归实现,检测图形是否有周期,这是我的代码:

bool Graph::dfsCyclic(unsigned vt, bool *visited, bool *beingVisited) {

    beingVisited[vt] = true;
    bool dfs = false;

    for (list<unsigned>::const_iterator it = this->adjList[vt].begin(); it!= this->adjList[vt].end(); ++it) {
        if (beingVisited[*it]) {
            return true;
        }

        if (!visited[*it]) {
            dfs = this->dfsCyclic(*it, visited, beingVisited);
        } 
    }

    visited[vt] = true;
    beingVisited[vt] = false;
    return dfs;
}

bool Graph::isCyclic() {
    bool visited[this->v];
    bool beingVisited[this->v]; 

    for (unsigned i = 0; i < this->v; ++i) {
        visited[i] = false;
        beingVisited[i] = false;
    }

    for (unsigned i = 0; i < this->v; ++i) {
        if (dfsCyclic(i, visited, beingVisited)) {
            return true;
        }
    }

    return false;
}

我想知道你们是否认为这是一个很好的实施方案。我做了一些测试,效果很好。我也想知道我怎么能和这个代码的ITERATIVE版本,我已经尝试但我有一些麻烦。在此先感谢您的帮助!无论如何我还能证明这段代码的正确性吗?

0 个答案:

没有答案