在Python中查找两个城市之间的捷径长度的程序

在Python中查找两个城市之间的捷径长度的程序

假设有n个城市,这些城市由两种道路连接;高速公路和捷径。现在,有一张地图,只有高速公路在地图上显示,所有的捷径都不在地图上。城市交通部门想要推出一种交通工具,利用高速公路和捷径连接城市。我们知道,在两个城市之间没有高速公路时,它们之间就有捷径。我们的任务是在捷径的最小距离范围内找到起始城市到所有其他城市的距离。

所以,如果输入如下

在Python中查找两个城市之间的捷径长度的程序

和起始顶点(s)为1,那么输出将是3 1 2。

如果我们仅采用捷径,那么城市1和2之间的路径将是1 -> 3 -> 4 -> 2,成本将为3。

同样地,

1和3: 1 -> 3,成本1。

1和4: 1 -> 3 -> 4,成本为2。

要解决此问题,请按照以下步骤操作 −

  • graph:包含n个集合的新列表
  • 对于边缘中的每一对(x,y),做
    • x:= x – 1
    • y:= y – 1
    • 将y插入graph [x]中
    • 将x插入graph [y]中
  • temp_arr:包含值为-1的n个元素的新数组
  • b_set:包含键为s – 1的新映射
  • f:包含数字0到n与b_set的集合差异的新集合
  • index:= 0
  • while b_set的size大于0,做
    • 对于b_set中的每个元素a,做
      • temp_arr [a]:= index
    • nxt:包含不是b_set子集的graph值的新映射
    • f:f和nxt的差异
    • b_set:nxt
    • index:= index + 1
  • 返回temp_arr的非零值

示例

让我们看一下以下实现,以更好地理解 −

def solve(n, edges, s):
    graph = [set() for i in range(n)]
    for (x, y) in edges:
        x -= 1
        y -= 1
        graph[x].add(y)
        graph[y].add(x)
    temp_arr = [-1] * n
    b_set = {s - 1}
    f = set(range(n)).difference(b_set)
    index = 0
    while len(b_set) > 0:
        for a in b_set:
            temp_arr [a]:= index
        nxt:= {f for f in f if not b_set.issubset (graph [f])}
        f = f.difference(nxt)
        b_set = nxt
        index += 1
    return (' '.join(str(t) for t in temp_arr if t > 0))    

print(solve(4, [(1, 2), (2, 3), (1, 4)], 1))

输入

4, [(1, 2), (2, 3), (1, 4)], 1

输出

3 1 2

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程