左图可得右图的邻接矩阵,将其数据录入二维数组即为下图
队列矩阵如下图,将数据录入二维数组中
程序完整代码为
m=float('inf')
r=[[0,1,12,m,m,m],[m,0,9,3,m,m],[m,m,0,m,5,m],[m,m,4,0,13,15],[m,m,m,m,0,4],[m,m,m,m,m,0]]
for i in range(6):
for j in range(6):
print(r[i][j],end='\t')
print()
path=[[0 for i in range(6)] for j in range(6)]
for i in range(6):
for j in range(6):
if r[i][j]!=0 and r[i][j]!=m:
path[i][j]=j
for i in range(6):
for j in range(6):
print(path[i][j],end='\t ')
print()
print('________________________')
for x in range(6):
for i in range(6):
for j in range(6):
if r[i][x]+r[x][j]<r[i][j]:
r[i][j]=r[i][x]+r[x][j]
path[i][j]=path[i][x]
print('________________')
for i in range(6):
for j in range(6):
print(r[i][j],end='\t ')
print()
print('___________________')
for i in range(6):
for j in range(6):
print(path[i][j],end='\t ')
print()
运行则可得最终结果
距离矩阵为
队列矩阵为
举个例子,要求结点1到结点5的最短距离和经过的结点,从程序运行结果所得的图一中可知第0行第4列的值为13,即为最短距离,接下来由图二来求得最短距离所经过的结点,因为矩阵的索引值要减一,则1→5即为0→4,在图二中找第0行第4列的值,为1,则路径更新为0→1,再在图中找第1行第4列的值,为3,则路径更新为0→1→3,再在图中找第3行第4列的值,为2,则路径更新为0→1→3→2,再在图中找第2行第4列的值,为4,则路径更新为0→1→3→2→4,因为是索引值,所以将其加一,得1→2→4→3→5
分割线
——————————————————————————
添加了结果查询程序,最终代码如下:
m=float('inf')
r=[[0,1,12,m,m,m],[m,0,9,3,m,m],[m,m,0,m,5,m],[m,m,4,0,13,15],[m,m,m,m,0,4],[m,m,m,m,m,0]]
for i in range(6):
for j in range(6):
print(r[i][j],end='\t')
print()
path=[[0 for i in range(6)] for j in range(6)]
for i in range(6):
for j in range(6):
if r[i][j]!=0 and r[i][j]!=m:
path[i][j]=j
for i in range(6):
for j in range(6):
print(path[i][j],end='\t ')
print()
print('________________________')
for x in range(6):
for i in range(6):
for j in range(6):
if r[i][x]+r[x][j]<r[i][j]:
r[i][j]=r[i][x]+r[x][j]
path[i][j]=path[i][x]
print('________________')
for i in range(6):
for j in range(6):
print(r[i][j],end='\t ')
print()
print('___________________')
for i in range(6):
for j in range(6):
print(path[i][j],end='\t ')
print()
##以下为结果查询
a,b=map(int,input('输入起点和终点,用空格分割开,回车键结束:').split(' '))
m,n=a-1,b-1
print(f'最短路径距离为\n{r[m][n]}')
print('l路径为:')
print(f'{m+1}→',end=' ')
while True:
if path[m][n]==n:
break
print(f'{path[m][n]+1}→',end=' ')
m=path[m][n]
print(path[m][n]+1)
运行结果如图