所有可能的路径算法

问题描述

我对数学算法不太满意,需要为我正在研究的项目使用一个。我已经找到了A点到B点的答案,但没有一个与我要寻找的真正匹配。我正在寻找最佳的省时算法来完成此任务:

输入:

Points {
    In
    Out
}

[Bridge]Points = {
    "AB-1" = {"A","B"}
    "AB-2" = {"A","B"}
    "BA-1" = {"B","A"}
    "BA-2" = {"B","A"}
    "AC-1" = {"A","C"}
    "AC-2" = {"A","C"}
    "CA-1" = {"C","A"}
    "CA-2" = {"C","A"}
    "BC-1" = {"B","C"}
    "BC-2" = {"B","C"}
    "CB-1" = {"C","B"}
    "CB-2" = {"C","B"}
}

每个“桥”代表2个“点”:第一个值是“ in”,第二个值是“ out”。

每个路径只能使用每个唯一桥一次。 不同的桥可以具有相同的输入/输出(例如“ BC-1” “ BC-2” ,..),并且每个唯一的桥必须具有不同的输入/输出。 (“ AA-1” = {“ A”,“ A”} 是不可能的)。

目标是获得给定起点和终点的所有可能路径,起点和终点可以是相同的点( A-> A B-> B ,..)。

对于A到A的预期输出:

AB-1 -> BA-1
AB-1 -> BA-2
AB-2 -> BA-1
AC-1 -> CA-2
AB-1 -> BA-1 -> AB-2 -> BA-2
AB-1 -> BA-2 -> AC-1 -> CB-2 -> BA-1
AC-2 -> CA-1 -> AB-1 -> BA-2
AC-1 -> CA-1 -> AB-2 -> BC-1 -> CA-2
...

此外,定义最大路径长度(以避免在算法内进行后续处理)的可能性将是可选的,但非常有趣。 感谢您的宝贵时间,非常感谢您的建议。

解决方法

一个人可以使用这样的递归(伪代码):

findPath(from,to,path_to_from) {
  if from == to { output path_to_from }
  for all bridges going out from 'from' that were not already used in path_to_from {
    findPath(bridge.out,path_to_from + bridge)
  }
}

并用findPath(A,B,empty_path)调用以输出从A到B的所有路径。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...