我正在研究图形,我用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版本,我已经尝试但我有一些麻烦。在此先感谢您的帮助!无论如何我还能证明这段代码的正确性吗?