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