应用
快递业务有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:print(f"{i}-{j}站点的可达性数值")element = int(input("请输入0或1:"))row.append(element)if i > j:row.append(s[j][i])s.append(row)print(s)# 待出发节点数 = 总节点数 - 最少连线数量
# 例如10个站点,7个站点连通(至少6根线)、2个站点能连通(至少1根)、1个站点单独,10-6-1-0=3
# 遍历二维数组s,查看对角线以上、为1的元素的个数
num = 0for i in range(0, N): for j in range(0, N): if i < j:if s[i][j] == 1:num = num + 1print(f"至少从{N-num}个节点出发")
# 站点:0 1 2 3
# 2与0、1、3连通,0、1、3互不直通请输入站点个数:4
0-1站点的可达性数值
请输入0或1:0
0-2站点的可达性数值
请输入0或1:1
0-3站点的可达性数值
请输入0或1:0
1-2站点的可达性数值
请输入0或1:1
1-3站点的可达性数值
请输入0或1:0
2-3站点的可达性数值
请输入0或1:1
[[1, 0, 1, 0], [0, 1, 1, 0], [1, 1, 1, 1], [0, 0, 1, 1]]
至少从1个节点出发