a=[[0 for i in range(85)]for j in range(85)]
dp=[[999999999 for i in range(85)]for j in range(85)]
vis=[[0 for i in range(85)]for j in range(85)]
tot=0
list=[]
Mini=-1
Minj=-1
Min=9999999999
dx=[1,-1,0,0]
dy=[0,0,1,-1]
def find():
global Mini
global Minj
global Min
Mini=-1
Minj=-1
Min=9999999999
for w in range(len(list)):
i=list[w][0]
j=list[w][1]
for k in range(4):
nx=i+dx[k]
ny=j+dy[k]
if nx>=0 and nx<80 and ny>=0 and ny<80 and vis[nx][ny]==0 and dp[i][j]+a[nx][ny]<Min:
Min=dp[i][j]+a[nx][ny]
Mini=nx
Minj=ny
def update():
global tot
global Min
x=Mini
y=Minj
dp[x][y]=Min
vis[x][y]=1
list.append([x,y])
tot+=1
print('第',tot,'个确定:(',x,',',y,')')
if x==79 and y==79:
return True
else:
return False
file=open('e:\\matrix.txt')
f=file.read()
s=f.split('\n')
s.pop()
for i in range(80):
a[i]=s[i].split(',')
for i in range(80):
for j in range(80):
a[i][j]=int(a[i][j])
vis[0][0]=1
dp[0][0]=a[0][0]
tot+=1
list.append([0,0])
while tot<6400:
find() #找到最小的位置
if update()==True: #更新
break
print('bingo: ',dp[79][79])
file.close()