在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),做
- 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
- 对于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