Python中的Euler 81项目

2024-09-28 22:20:38 发布

您现在位置:Python中文网/ 问答频道 /正文

在下面的5乘5矩阵中,从左上角到右下角的最小路径和(只通过向右和向下移动)用粗体红色表示,等于2427。在

131673 234 103 18

20196342965 150

630 803746422111

537 699 497 121956

805 732 524 37331

求最小路径和矩阵.txt(右键单击并“将链接/目标另存为…”),一个31K文本文件,包含一个80×80矩阵,只需右下移动即可从左上角到右下角。在

备注:我认为他们在标记方式时犯了错误

import numpy as np

matrix0 = [ map(int, row.split()) for row in open('matrix.txt')]

matrix=np.arange(6400).reshape(80,80)

for i in range(80):
    for j in range(80):
        matrix[i, j]=0

for i in range(80):
    for j in range(80):
        matrix[i, j]=matrix0[i][j]

sum=matrix[0,0]

k=0
n=0
while (k+n)<158:
    for i in range(k, k+1):
        for j in range(n, n+1):
            if i!=79 and j!=79:
                if matrix[i+1, j]<=matrix[i, j+1]:
                    sum=sum+matrix[i+1, j]
                    k=i+1
                    n=j
                else:
                    sum+=matrix[i, j+1]
                    k=i
                    n=j+1
            elif i==79:
                sum+=matrix[i, j+1]
                k=i
                n=j+1
            elif j==79:
                sum+=matrix[i+1, j]
                k=i+1
                n=j                 

print sum

当我把这个代码用于矩阵5x5的问题时,它会给出正确的答案。我不明白为什么它在更大的矩阵上不起作用?在


Tags: in路径txtforifnprange矩阵
1条回答
网友
1楼 · 发布于 2024-09-28 22:20:38

因为你没有正确执行搜索。问题是要求总成本最小的路径,所以你需要一个A*搜索或Dijkstra算法。对每个节点的最低分支进行简单的一次检查不会切断它。在

相关问题 更多 >