用python实现以下内容,提供代码。程序的主要功能(运用Floyd 算法) 2.1 输入功能 输入学校的单位总数;输入图的边数; 输入学校各单位的名称; 输入学校各单位人员去超市频度; 输入存在边的两个单位的名称(用空格隔开);相通两个单位间的距离 2.2 求权值的功能 求出将超市设在各个单位时,所得总的权值,返回用数组存储。 2.3 求最优功能 从上述的各个权值中,选出最小值为最优,并将最优值和对应的选址储存在链表中,返回头指针。 2.4 显示功能 显示最优地址的地点、总权数以及各单位到它的距离。
时间: 2024-02-22 18:56:51 浏览: 83
以下是用Python实现该功能的代码:
```python
INF = float("inf")
# Floyd算法求最短路
def floyd(n, dist):
for k in range(n):
for i in range(n):
for j in range(n):
if dist[i][j] > dist[i][k] + dist[k][j]:
dist[i][j] = dist[i][k] + dist[k][j]
# 输入学校的单位总数和图的边数
n = int(input("请输入学校的单位总数:"))
m = int(input("请输入图的边数:"))
# 输入学校各单位的名称
names = []
for i in range(n):
name = input("请输入第%d个单位的名称:" % (i+1))
names.append(name)
# 输入学校各单位人员去超市频度
freq = []
for i in range(n):
f = int(input("请输入%s的人员去超市频度:" % names[i]))
freq.append(f)
# 输入存在边的两个单位的名称及相通两个单位间的距离
dist = [[INF for j in range(n)] for i in range(n)]
for i in range(n):
dist[i][i] = 0
for i in range(m):
u, v, d = input("请输入第%d条边的两个单位及其距离:" % (i+1)).split()
u, v, d = names.index(u), names.index(v), int(d)
dist[u][v] = dist[v][u] = d
# 求权值的功能
weights = []
for i in range(n):
w = 0
for j in range(n):
if dist[i][j] != INF:
w += freq[j] * dist[i][j]
weights.append(w)
# 求最优功能
min_weight = min(weights)
min_index = weights.index(min_weight)
# 显示功能
print("最优地址的地点:%s" % names[min_index])
print("总权数:%d" % min_weight)
print("各单位到最优地址的距离:")
for i in range(n):
if i != min_index:
print("%s:%d" % (names[i], dist[i][min_index]))
```
使用该代码时,需要按照提示依次输入学校单位的总数、图的边数、各单位的名称、各单位的人员去超市频度、存在边的两个单位及相通两个单位间的距离。在输入完毕后,会输出最优地址的地点、总权数以及各单位到最优地址的距离。
阅读全文