我是新手,我会非常感谢任何帮助...我有一个元组列表,我必须找到连接的元组之间的最短路径。 例如,我有名为pairs = [(1,2),(2,4),(1,3),(3,1),(4,3)]的列表,我必须找到以下最短路径:< / p>
1 to 2, 1 to 3 and 1 to 4
2 to 1, 2 to 3 and 2 to 4
3 to 1, 3 to 2 and 3 to 4
在这个列表对中,如果我搜索1到3之间的连接,我必须得到可能的结果:
1) (1,3)
2) (1,2)-(2,4)-(4,3)
当然最短的是第一个 - (1,3)
...感谢名单
答案 0 :(得分:1)
如果你只搜索两个数字之间的最短路径(让我们称之为节点)并且它们之间的边长为1,你可以使用BFS,如果它们有其他距离,你可以使用Dijkstra。由于两者都是图算法,因此您可能需要更改它们,因为您只有一个边列表,而不是图形结构。
答案 1 :(得分:0)
使用BFS解决非加权图中的最短路径问题。
伪代码:
Create Queue q;
push into q starting node and mark distance to starting node as 0.
while(q is not empty){
get n : first elemnt in the queue
get all connected nodes to n that are not yet visited and push them to the queue:
mark the distance to those node as the distance to n + 1.
}
示例:假设您的起始节点为1。
您在图表中的连接:
1->2, 1->3, 1->4
2->1, 2->3, 2->4
3->1, 3->2, 3->4
设置一个boolean的访问数组:visited 4 = {false,false,false,false}和距离数组dist 4 = {inf,inf,inf,inf}和父数组= {-1,-1,-1,-1}。
现在将节点1推入队列Q,将其设置为0,父节点设置为1然后开始:
迭代1状态:
Queue = {1}
Dist = {0,inf,inf,inf}
visited= {true,false,false,false}
parent= {1,-1,-1,-1}
迭代2:
队列中唯一的节点是1,你选择它并将它们的邻居推送到Queue节点:2,3,4。更新他们的距离
Queue = {2,3,4}
Dist = {0,1,1,1}
visited= {true,false,false,false}
parent= {1,1,1,1}
等等,直到你得到一个空队列。 (表示您已访问过所有节点)。
在此示例中,您将看到到节点3的距离为Dist 3 = 1,此节点的父节点为父3 = 1(如果您要重建路径)
有关详细信息,请查看BFS以及Python中的实现:Python BFS DFS或this
答案 2 :(得分:-3)
这是Travelling salesman problem。您可以使用遗传算法,它将以最低的运营成本为目标。问候。