使用堆栈实现的所有可能路径的DFS算法

时间:2012-08-18 05:43:28

标签: c++ algorithm

使用堆栈是否可以实现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,而不仅仅是那条。

1 个答案:

答案 0 :(得分:2)

否 - 在无向图的情况下,存在无限数量的路径(只是在任何给定边缘上来回移动,或绕过周期),因此您无法编写代码来全部返回。

如果你设置了一些其他约束(比如“只访问每个节点一次的路径”),那么是。

对于“只访问每个节点一次的路径”的约束,你将基本上改变你的搜索,以便访问[i]是“我在这条路径上访问了[i]”而不是“我曾经访问过这个节点?” (因为它现在在代码中),然后每当你到达目标时,你应该将当前路径添加到找到的路径列表中,并继续,就像你没有找到它一样。