连接的元组对之间的最短路径

时间:2015-05-05 09:57:15

标签: python-3.x path tuples shortest

我是新手,我会非常感谢任何帮助...我有一个元组列表,我必须找到连接的元组之间的最短路径。 例如,我有名为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)

...感谢名单

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 DFSthis

答案 2 :(得分:-3)

这是Travelling salesman problem。您可以使用遗传算法,它将以最低的运营成本为目标。问候。