递归实施DFS的问题

时间:2019-07-18 14:47:46

标签: c++ algorithm depth-first-search

我试图自己递归地实现DFS,但是我遇到了问题。我找不到我的错误在哪里。我试图完全依靠自己来实现它,但是遇到了问题。我见过的大多数DFS实现都使用OOP,而我试图通过具有动态数组的邻居列表简单地实现它。

using namespace std;

void DFS(vector<int> *numNodes, int startingVertex, bool* used) {
for(int i:numNodes[startingVertex]) {
    if(!used[i]) {
        used[i] = true;
        cout<<i<<endl;
        DFS(numNodes, i, used);
    }

}
}

int main()
{
int n, k, temp, startingVertex;
cin>>n;
vector<int> numNodes[n];

for(int i=0; i<n; i++) {
    cout<<"How many neighbours for node "<<i<<"?"<<endl;
    cin>>k;
    cout<<"Enter neighbours"<<endl;
    for(int j=0; j<k; j++) {
        cin>>temp;
        numNodes[i].push_back(temp);
    }
}
cout<<"Enter starting point"<<endl;
bool used[n];
for(int i=0; i<n; i++) {
    used[i] = false;
}

cin>>startingVertex;
cout<<"Starting DFS from vertex "<<startingVertex<<"..."<<endl;
cout<<startingVertex<<endl;
used[startingVertex] = true;

DFS(numNodes, startingVertex, used);
}

1 个答案:

答案 0 :(得分:1)

问题单上有很多关于良好C ++ /编码实践的评论,但是从算法的角度来看,我看到的问题是在递归调用DFS(numNodes, i, used);之后,您需要设置{{1} }返回used[i],因此节点false可以再次用于图中的另一条路径。

相关问题