应用
快递业务有N个站点,1<N<10000;站点0、站点1可达,记作0-1;如果0-1、1-2,则站点0、站点2可达,记作0-2;s[i][j]=1表示i-j可达,反之s[i][j]=0表示i-j不可达;s[i][j]与s[j][i]取值相同;现用二维数组表示N个站点可达关系,请计算快递员至少从几个站点出发,才能到达所有站点?
实现
N = int(input("请输入站点个数:"))
s = []
# 创建站点可达的二位列表
for i in range(0, N):
row = []
for j in range(0, N):
if i == j:
row.append(1)
if i < j:
element = int(input(f"{i}-{j}站点的可达性数值,0或1:"))
row.append(element)
if i > j:
row.append(s[j][i])
s.append(row)
print(s)
# 检查站点可达性
for i in range(0, N):
available_status = []
for j in range(0, N):
if s[i][j] == 1:
available_status.append(j)
formatted_status = '、 '.join(f"站点{num}" for num in available_status)
print(f"{i}号站点可以覆盖{formatted_status}")
start_num = 0
# 最少站点出发数 = 总结点数 - 不同节点间的一次连线数
for i in range(0, N):
for j in range(0, N):
if i < j and s[i][j] == 1:
start_num += 1
print(f"最少站点出发数{N-start_num}")
请输入站点个数:4
0-1站点的可达性数值,0或1:1
0-2站点的可达性数值,0或1:0
0-3站点的可达性数值,0或1:0
1-2站点的可达性数值,0或1:0
1-3站点的可达性数值,0或1:0
2-3站点的可达性数值,0或1:0
[[1, 1, 0, 0], [1, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]
0号站点可以覆盖站点0、 站点1
1号站点可以覆盖站点0、 站点1
2号站点可以覆盖站点2
3号站点可以覆盖站点3
最少站点出发数3