class Graph: def init(self, n, e): self.n = n # 图中顶点个数 self.e = e # 图中边的条数 self.arcs = [[float('inf')] * (n + 1) for _ in range(n + 1)] # 初始化邻接矩阵,用inf表示两点不直接相连 self.a = [[float('inf')] * (n + 1) for _ in range(n + 1)] # 存储最短距离 self.path = [[0] * (n + 1) for _ in range(n + 1)] # 存储最短路径 # 弗洛伊德算法 def floyd(self): for i in range(1, self.n + 1): for j in range(1, self.n + 1): self.a[i][j] = self.arcs[i][j] if i != j and self.a[i][j] < float('inf'): self.path[i][j] = i else: self.path[i][j] = 0 for k in range(1, self.n + 1): for i in range(1, self.n + 1): for j in range(1, self.n + 1): if self.a[i][k] + self.a[k][j] < self.a[i][j]: self.a[i][j] = self.a[i][k] + self.a[k][j] self.path[i][j] = self.path[k][j] for i in range(1, self.n + 1): for j in range(1, self.n + 1): if i != j: print(f'{i}到{j}的最短路径为{self.a[i][j]}:', end='') next = self.path[i][j] print(j, end='') while next != i: print(f'←{next}', end='') next = self.path[i][next] print(f'←{i}') # 计算最短距离之和 def add(self): sum = [0] * (self.n + 1) for i in range(1, self.n + 1): for j in range(1, self.n + 1): if i != j: sum[i] += self.a[i][j] print(f'{i}到各顶点的最短路径总和为{sum[i]}') address = 1 for i in range(2, self.n + 1): if sum[0] > sum[i]: sum[0] = sum[i] address = i print(f'所以最短路径总和为{sum[0]},学院超市的最佳选址为顶点{address}') if name == 'main': n = int(input('请输入图中顶点个数:')) e = int(input('请输入图中边的条数:')) t = Graph(n, e) print('学校超市最佳选址*') print() print('请输入存在路径的两个单位以及相通两个单位间的距离(用空格隔开)') print() for k in range(1, e + 1): i, j, w = map(float, input().split()) t.arcs[i][j] = w t.floyd() t.add() input('按回车键退出')
时间: 2024-02-20 20:59:35 浏览: 64
classgraph-4.8.83-API文档-中文版.zip
你的代码中出现了使用浮点数作为列表的索引的地方,具体是在这一行:
```python
i, j, w = map(float, input().split())
```
在这里,你将输入的三个数字分别赋值给了 i、j 和 w,但是输入的数字可能会包含小数点,导致 i 和 j 是浮点数,无法作为邻接矩阵的索引。你需要将 i 和 j 转换成整数,例如可以使用 `int()` 函数将它们转换成整数,例如:
```python
i, j, w = map(float, input().split())
i, j = int(i), int(j)
```
这样就可以将 i 和 j 转换成整数,避免了使用浮点数作为列表索引导致的错误。
阅读全文