Python程序:查找两城市之间捷径的距离
假设有n个城市,城市之间连接着两种类型的道路:高速公路和捷径。现在有一张地图,地图上只有高速公路,所有捷径都缺失。城市的交通部门希望推出一种交通工具,利用高速公路和捷径连接这些城市。当两个城市之间没有高速公路时,我们知道它们之间存在捷径。我们的任务是找到从起始城市到所有其他城市的捷径最小距离。
例如,输入如下:
起始顶点(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)在edges中,执行:
- 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
- 当b_set的大小>0时,执行:
- 对于b_set中的每个元素a,执行:
- temp_arr[a] := index
- nxt := 一个包含graph中不是b_set子集的值的新映射
- f := f与nxt的差集
- b_set := nxt
- index := index + 1
- 对于b_set中的每个元素a,执行:
- 返回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
广告