使用堆栈是否可以实现DFS实现,在图形情况下(循环/非循环),可以在图形中为我提供从一个顶点到另一个顶点的所有可能路径。
我目前的DFS代码如下: -
void Graph::DFS(int x, int required){
stack s;
bool *visited = new bool[n+1];
int i;
for(i = 0; i <= n; i++)
visited[i] = false;
s.push(x);
visited[x] = true;
if(x == required) return;
cout << "Depth first Search starting from vertex ";
cout << x << " : " << endl;
while(!s.isEmpty())
{
int k = s.pop();
if(k == required)
{
cout<<k<<" ";
break;
}
cout<<k<<" ";
for (i = n; i >= 0 ; --i)
if (isConnected(k, i) && !visited[i])
{
s.push(i);
visited[i] = true;
}
}
cout<<endl;
delete [] visited;
}
这确实给了我一条可能的路径,如果存在,但我想要的是all possible paths
,而不仅仅是那条。
答案 0 :(得分:2)
否 - 在无向图的情况下,存在无限数量的路径(只是在任何给定边缘上来回移动,或绕过周期),因此您无法编写代码来全部返回。
如果你设置了一些其他约束(比如“只访问每个节点一次的路径”),那么是。
对于“只访问每个节点一次的路径”的约束,你将基本上改变你的搜索,以便访问[i]是“我在这条路径上访问了[i]”而不是“我曾经访问过这个节点?” (因为它现在在代码中),然后每当你到达目标时,你应该将当前路径添加到找到的路径列表中,并继续,就像你没有找到它一样。