Graph - Adjacency List C ++ - 从源到目的地的所有路径

时间:2016-05-04 14:05:33

标签: c++ algorithm graph graph-theory adjacency-list

我正在尝试查找图中从源节点到目标节点的所有路径。该图是针对性的。我使用C ++的图形使用相当简单的邻接列表表示。 这就是我用于节点的内容:

struct node
    {
        int id;
        std::vector <int> neighbours;
    };

邻居是您可以从节点到达的节点。

这是我用来存储整个图表的内容:

std::vector < node > graph;

示例:

enter image description here

对于上图,使用代码:

for(int i=0;i<graph.size();i++)
    {
        std::cout<<graph[i].id<<"->";
        for(int j=0;j<graph[i].neighbours.size();j++)
        {
            std::cout<<graph[i].neighbours[j].id;
            if(j!=graph[i].neighbours.size()-1)
                std::cout<<",";
        }
        std::cout<<std::endl;
    }

正确地给我所有的邻接关系:

0→1,4,3

1→2

2→3

3→

4-→2

现在,我想写一个这样的函数:

void find_paths(int start, int end)

当你给出开始点和结束点时,它会打印出从开始到结束点的所有可能路径。

示例:当我跑步时,

find_paths(0,3):

0→1→2→3

0→4→2→3

0→3

我想要这样的输出。性能在这里不是真正的问题。任何工作算法都可以。我可以用什么样的算法来解决这个问题?另外,如果没有可能的路径,我怎样才能让函数识别出来?

1 个答案:

答案 0 :(得分:1)

查看Breadth first searchDepth first search。 这两种方法都旨在以不同的顺序遍历图形,以找到某个节点。

要获得所有解决方案而不仅仅是最短的解决方案,您可以保留所有路径的列表,这些路径会在遍历期间取得成功。