用python实现以下内容,提供代码。程序的主要功能(运用Floyd 算法) 2.1 输入功能 输入学校的单位总数; 输入学校各单位的名称; 输入学校各单位人员去超市频度; 输入请输入存在路径的两个单位以及相通两个单位间的距离(用空格隔开) 2.2 求权值的功能 求出将超市设在各个单位时,所得总的权值,返回用数组存储。 2.3 求最优功能 从上述的各个权值中,选出最小值为最优,并将最优值和对应的选址储存在链表中,返回头指针。 2.4 显示功能 显示最优地址的地点、总权数以及各单位到它的距离。
时间: 2024-02-22 21:56:44 浏览: 22
以下是用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("请输入学校的单位总数:"))
# 输入学校各单位的名称
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
m = int(input("请输入存在路径的单位对数:"))
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]))
```
使用该代码时,需要按照提示依次输入学校单位的总数、各单位的名称、各单位的人员去超市频度、存在路径的单位对及其距离。在输入完毕后,会输出最优地址的地点、总权数以及各单位到最优地址的距离。