You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迷宫遍历数字求和程序逻辑错误排查求助

迷宫处理程序逻辑错误排查请求

我正在开发一个迷宫处理程序,需求为读取.txt格式迷宫文件,沿路径收集所有十进制数字求和,遇到'#'时终止程序。已多次调试代码但仍未定位逻辑错误,推测问题出在行列更新或矩阵尺寸处理上。以下是测试用的两个迷宫文件及我的Python解决方案(变量为葡萄牙语),恳请帮忙排查错误:

测试文件1

6 59
   #                                                      
   5                                                      
   |                                                      
   \-48-3-----6---------------9-5---------2--3--------7-7-\
                                                          |
------------5-------------------0--50---8-------9----4---6/

测试文件2

36 80
                                                                                 
                                                                                 
                                                                                 
   /-48-3-----6---------------9-5---------2--3--------7-7-\                      
   |                                                      |                      
---|--------5-------------------0--5---8-------9----4---6-|----6---4--68----\   
   |           /0--\                                      |                 |   
   8           0 /-|--------------------4-7-----9------2-6-\                |   
   \---3---6--4|-|-|----09\        /789--0--#---4-00----71||8------------0--/   
               | | |      |        |                      ||                     
               | 5 |      |        |                      |4                     
     /6--11-9--2-----2-------1-7--1----\                  85                     
     5         | 3 |      |        |   |                  5|                     
     |         | | |      4        |   #                  ||                     
     |         | 4 |      |        |                      1|                     
     |         | | |      2        |                      ||                     
     |         3 0 |      |        9                      ||                     
     |         | | |      |        8  /2----7-------------8|2--2----0-----3\    
     |         | | 1      |        1  |                   ||               |    
     3         | | |      |        |  |                   |8               0    
     \-7--4------91/      |        \--|----3-------6----73/|               7    
               \-----3------634-----90---965-8------------6/               |    
                 |        7           |                                    |    
                 |        \---5----8--/                                    |    
                 |                                                         |    
                 \-------------4---9-2-5--1-37-15---2--2--6----9---1-25----/    

我的解决方案代码

nome = 'x1.txt'
doc = []

with open(nome, 'r') as file:
    for l in file:
        linha = list(l.strip())
        doc.append(linha)

doc = [[element for element in row if element != '\n'] for row in doc]
linhas = ''
colunas = ''
achou = False


for carac in doc[0]:
    if carac == ' ':
        achou= True
    elif not achou:
        linhas += carac
    else:
        colunas += carac

linhas = int(linhas)
colunas = int(colunas)
# doc.remove(doc[0])
print(linhas, colunas)
print(doc)

somaTotal = 0
num = 0

def esq_dir(linhaA, colunaA):
    global num
    global somaTotal
    num = '0'
    c = colunaA
    for i in range(c, colunas):
        carac = doc[linhaA][i]
        print(carac)
        print(linhaA, colunaA)
        if carac == '#':
            somaTotal += int(num)
            num = '0'
            break
        if carac == '-' or carac == '|':
            colunaA += 1
            somaTotal += int(num)
            num = '0'
        if carac == '/':
            # colunaA += 1
            somaTotal += int(num)
            linhaA -= 1
            subindo(linhaA, colunaA)
            break
        if carac == '\\':
            # colunaA += 1
            somaTotal += int(num)
            linhaA += 1
            descendo(linhaA, colunaA)
            break
        elif carac.isdigit():
            num += carac
            colunaA += 1

def dir_esq(linhaA, colunaA):
    global somaTotal
    global num
    num = '0'
    c = colunaA
    for i in range(c -1,-1, -1):
        carac = doc[linhaA][i]
        print(carac)
        print(linhaA, colunaA)
        if carac == '#':
            somaTotal += int(num)
            num = '0'
            break
        if carac == '-' or carac == '|':
            colunaA -= 1
            somaTotal += int(num)
            num = '0'
        if carac == '\\':
            linhaA += 1
            somaTotal += int(num)
            subindo(linhaA, colunaA)
            break
        if carac == '/':
            linhaA -= 1
            somaTotal += int(num)
            descendo(linhaA, colunaA)
            break
        elif carac.isdigit():
            num += carac
            colunaA -= 1

def descendo(linhaA, colunaA):
    global somaTotal
    num = '0'
    l = linhaA
    for i in range(l, linhas):
        carac = doc[i][colunaA]
        print(carac)
        if carac == '#':
            somaTotal += int(num)
            num = '0'
            break
        if carac == '-' or carac == '|':
            linhaA += 1
            somaTotal += int(num)
            num = '0'
        if carac == '/':
            colunaA -= 1
            dir_esq(linhaA, colunaA)
            break
        if carac == '\\':
            colunaA += 1
            esq_dir(linhaA, colunaA)
            break
        elif carac.isdigit():
            num += carac
            linhaA += 1

def subindo(linhaA, colunaA):
    global somaTotal
    num = '0' # troquei de '' para 0 para evitar syntax errors
    l = linhaA
    for i in range(l - 1,-1, -1): # alterei para -1 o 'stop' pois não estava lendo a condição de parada (#), portanto não somava o 4
        carac = doc[i][colunaA]
        print(carac)
        print(linhaA, colunaA)
        if carac == '#':
            somaTotal += int(num)
            num = '0'
            break
        if carac == '-' or carac == '|':
            linhaA -=1
            somaTotal += int(num)
            num = '0'
        if carac == '/':
            colunaA += 1
            somaTotal += int(num)
            esq_dir(linhaA, colunaA)
            break
        if carac == '\\':
            linhaA -= 1
            somaTotal += int(num)
            dir_esq(linhaA, colunaA)
            break
        elif carac.isdigit():
            num += carac 
            linhaA -= 1


linhaAtual = 0
colunaAtual = 0

for i, linha in enumerate(doc):
    if linha and linha[0] == '-':
        linhaAtual = i
        break

# print(doc)
# print(linhaAtual)

esq_dir(linhaAtual, colunaAtual)
print(somaTotal)

内容的提问来源于stack exchange,提问作者Heloysa Pelizon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 11:32:05