if __name__ == '__main__': sys.setrecursionlimit(10000000) #用于设置递归深度的限制 n = 4 inf = 9999999999 # 建立4*4的表格 graph = [[(lambda x: 0 if x[0] == x[1] else inf)([i, j]) for j in range(n)] for i in range(n)] # 建表 # [[0, 0, 0, 0], # [1, 1, 1, 1], # [2, 2, 2, 2], # [3, 3, 3, 3]] parents = [[i] * n for i in range(n)] # 关键地方,i-->j 的父结点初始化都为i for u, v, c in datas: graph[u][v] = c floyd() print('Costs:') for row in graph: for e in row: print('∞' if e == inf else e, end='\t') print()
时间: 2024-04-05 19:32:35 浏览: 66
这段代码实现了 Floyd 算法,用于求解全源最短路径问题。其中,n 表示节点的个数,inf 表示两个节点之间不存在边时的权值。初始时,graph 表示每个节点到自己的距离为0,到其他节点的距离为 inf,parents 表示每个节点的父节点都是自己。
接着,根据给定的数据 datas,更新 graph 中节点之间的权值。然后,调用 floyd 函数来求解每对节点之间的最短路径,并更新 graph 和 parents。
最后,输出 graph 中的最短路径长度,如果路径不存在,则输出 ∞。
相关问题
if __name__ == '__main__': sys.setrecursionlimit(10000000)
这段代码是 Python 中用于设置递归深度的限制的语句。在 Python 中,递归深度默认为 1000,当递归深度超过这个限制时,Python 解释器会抛出 RecursionError 异常。
sys.setrecursionlimit(n) 函数用于设置递归深度的限制,其中 n 表示递归深度的最大值。在这段代码中,设置递归深度的最大值为 10000000,即 1 千万。
需要注意的是,设置递归深度的最大值太大可能会导致栈溢出等问题,而且这个值的设置应该根据实际情况进行调整,过大过小都不利于程序的正常执行。
def loop(arr, i, count): j = i + arr[i] if j == len(arr) - 1: return count elif j < len(arr) - 1: count += 1 return loop(arr, j, count) else: return -1 if __name__ == "__main__": arr = [] line = sys.stdin.readline().strip() num = 0 for i in range(len(line)): if line[i] != ' ': num = num * 10 + (ord(line[i]) - ord('0')) else: arr.append(num) num = 0 arr.append(num)
这段代码是一个递归函数和读取标准输入的代码。递归函数名为`loop`,接受三个参数:一个整数列表`arr`,一个起始索引`i`和一个计数器`count`。递归函数的作用是在列表`arr`上从索引`i`开始向右跳跃,每次跳跃的距离为当前位置的值,直到跳到最后一个元素为止。如果能跳到最后一个元素,则返回计数器`count`的值;如果不能跳到最后一个元素,则返回-1。读取标准输入的代码将输入的一行字符串转换为整数列表`arr`,并返回该列表。
阅读全文