图 a |
图 b |
编写函数init,根据横向和纵向的正方形数量,返回所有顶点及其所有的相邻顶点数据。完善程序,在划线处填入合适的代码。
def init(m,n):
tot=(m+1)*(n+1) #顶点总数
lst=[[] for i in range(tot)]
for i in range(tot):
if i>m:
lst[i].append(i-m- 1)
if i<(m+1)*n:
lst[i].append(i+m+1)
if i%(m+1) != 0:
lst[i].append(i- 1)
if i%(m+1) != m:
return lst
图 c
编写函数print_path,输出所有的最短路径。完善程序,在划线处填入合适的代码。
def print_path(x,path,length): #为起点编号,length为Path中有效元素个数。
cnt=0
for i in range(length):
if path[i][0] == x:
cnt+= 1
s="最短路径"+str(cnt)+":"
v=path[i]
while :
s=s+str(v[0])+","
v=path[v[2]]
s=s+str(v[0])+" 。"
print(s)
m=3 #横向正方形数量
n=2 #纵向正方形数量
mtx=init(m,n)
x=int(input("请输入起点:"))
y=int(input("请输入终点:"))
path=[[] for i in range(30)]
passed=[False]*len(mtx) #保存顶点是否已途经
dis=0
head=0
tail=0
path[tail]=[y,0,- 1]
tail+= 1
passed[y]=True
while not found:
dis+= 1
pass_dis=[False]*len(mtx)
tmp=tail
for i in range(head,tail):
v=path[i]
for d in mtx[v[0]]:
if not passed[d]:
path[tail]=
tail+= 1
pass_dis[d]=True
if d == x:
found=True
head=tmp
for i in range(len(mtx)): #标记已途经的顶点
if :
passed[i]=True
#输出结果
print_path(x,path,tail)