应用
快递业务有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个站点可达关系,请计算快递员至少从几个站点出发,才能到达所有站点?
实现
python
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 = 0
for i in range(0, N):
for j in range(0, N):
if i < j:
if s[i][j] == 1:
num = num + 1
print(f"至少从{N-num}个节点出发")
powershell
# 站点: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个节点出发