您的位置:首页 > 编程语言 > Python开发

Python-Project Euler 83

2014-01-22 03:05 218 查看
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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: