图论理论算法

时间:2012-06-11 07:56:16

标签: c# java matlab

我正在努力获得从节点'A'开始并在同一节点结束的所有可能路径。该图是有向图(即每个节点连接到至少一个节点)。

约束是:我可以只访问一个节点,除了(当然是起始节点)。

问题:我试图在MATLAB中使用graphraverse函数来实现它,但它只给我一个这样的方法。任何可以用C,java实现的算法或逻辑都可以。

如果有人能给我任何指示,我会很高兴的。

注意:我不想要最短的路径,我想要一组可能的路径。

2 个答案:

答案 0 :(得分:1)

为什么不编写自己的递归函数?

findPath(Node start, Node end, List<Node> alreadyVisited)
    for (Node neighbor: other ends of outgoing edges from start) { 
         if (neighbor == end)
             display("Found a path: " + alreadyVisited + end)
         else if (neighbor not in alreadyVisited)
             findPath(neighbor, end, alreadyVisited + neighbor)
    }

......或类似的东西。由于您查找周期,因此初始调用应将相同的值传递给startend。当然,如果输出到提示是不够的,您需要在全局数组中收集正确的路径或找到更优雅的方式返回它们。

此外,对于较大的图形,执行双向搜索(同时跟随传入边缘并检查连续传出边缘和连续传入边缘到达的节点的交集,而不仅仅是是否已达到所需的端点)应该更快。 / p>

答案 1 :(得分:0)

不知道你的等级,但boost库非常好,如果你能正确配置它