基于python语言的迷宫求解器

基于python语言的迷宫求解器,python,Python,只是一个小迷宫解算器。尝试在python上使用它,但甚至不理解它为什么不打印任何内容。我刚开始学习python,并试图从cpp翻译我的老师代码,只是出于兴趣。 需要在访问每个单元后到达目的地 m = [ [2,0,0,0,0,0], [0,0,0,0,0,0], [0,0,0,0,0,0], [0,0,0,0,0,0], [0,0,0,2,0,0], [0,0,0,0,0,0] ] STOP = 34 r = 0 c = 0 def init

只是一个小迷宫解算器。尝试在python上使用它,但甚至不理解它为什么不打印任何内容。我刚开始学习python,并试图从cpp翻译我的老师代码,只是出于兴趣。 需要在访问每个单元后到达目的地

m = [
    [2,0,0,0,0,0],
    [0,0,0,0,0,0],
    [0,0,0,0,0,0],
    [0,0,0,0,0,0],
    [0,0,0,2,0,0],
    [0,0,0,0,0,0]
]

STOP = 34
r = 0
c = 0


def init( r_: int = 0, c_: int = 0) -> None:
    r = 0
    c = 0

def step(r,c,level):
    if level==STOP-1:
        if r == 3 and c == 5:
            for i in range(0,level):
                print("("+init(int(r),int(c))+"," + init(int(r),int(c)) + ") - ")
            print("(3,5)\n")
            return True
    else:
        return False
    m[r][c]=1

    if c > 0 and  m[r][c - 1] == 0:
        if step(r, c - 1, level + 1):
            return True

    if c < 5 and m[r][c + 1] == 0:
        if (step(r, c + 1, level + 1)):
            return True


    if r > 0 and m[r - 1][c] == 0:
        if (step(r - 1, c, level + 1)):
            return True

    if r < 5 and m[r + 1][c] == 0:
        if (step(r + 1, c, level + 1)):
            return True

    m[r][c] = 0
    return False
def main(argc, argv):
    step(0, 1, 0)
m=[
[2,0,0,0,0,0],
[0,0,0,0,0,0],
[0,0,0,0,0,0],
[0,0,0,0,0,0],
[0,0,0,2,0,0],
[0,0,0,0,0,0]
]
停止=34
r=0
c=0
def init(r:int=0,c:int=0)->无:
r=0
c=0
def步骤(r、c、液位):
如果级别==停止-1:
如果r==3和c==5:
对于范围(0,级别)内的i:
打印(“+init(int(r),int(c))+”,“+init(int(r),int(c))+”)
打印(“3,5)\n”)
返回真值
其他:
返回错误
m[r][c]=1
如果c>0且m[r][c-1]==0:
如果步骤(r,c-1,级别+1):
返回真值
如果c<5且m[r][c+1]==0:
如果(步骤(r,c+1,级别+1)):
返回真值
如果r>0且m[r-1][c]==0:
如果(步骤(r-1,c,级别+1)):
返回真值
如果r<5且m[r+1][c]==0:
如果(步骤(r+1,c,级别+1)):
返回真值
m[r][c]=0
返回错误
def干管(argc、argv):
步骤(0,1,0)

Python不像c那样自动调用main,也不需要main函数。您的代码可以处于顶层(例如,
print('hello world')
是一个有效的完整程序)

更改此行:

def main(argc, argv):
为此:

if __name__ == '__main__':
明白了

导入matplotlib.pyplot作为plt
S、 F,W,X=1,2,0,无
字段=[[X,S,W,W,W,W],
[W,W,W,W,W,W,W],
[W,W,W,W,W,W,W],
[W,W,W,W,W,F],
[W,W,W,X,W,W],
[W,W,W,W,W,W,W]]
行=列(字段)
COLS=len(字段[0])
START_POS=[(i,line.index)表示枚举(字段)中的i,如果行中有S][0]
FINISH_POS=[(i,line.index(F))表示枚举(字段)中的i,如果F在行中][0]
步骤=总和(字段中的行的行数(W)+1
打印(“开始:”,开始位置,“\n结束:”,完成位置,“\n总步骤:”,步骤)
def do_步骤(级别、路径、点):
全局场
r、 c=点数[-1]
如果r=COLS或字段[r][c]==X:
返回
如果级别==步骤和(r,c)==完成位置:
打印(“找到的路径:”,路径)
yy,xx=zip(*点)
plt.绘图(xx,yy,“-ok”)
plt.gca().invert_yaxis()
plt.show()
退出()
电流=场[r][c]
字段[r][c]=X

对于dr,dc,dir-in(-1,0,^'),(0,1,'>'),(1,0,'v'),(0,-1,'我建议你先学习语言基础知识。我不知道。谢谢,感谢你,欣赏这一点。不管怎样,我还是被困在步骤函数的某个地方了
import matplotlib.pyplot as plt

S, F, W, X = 1, 2, 0, None
FIELD = [[X,S,W,W,W,W],
         [W,W,W,W,W,W],
         [W,W,W,W,W,W],
         [W,W,W,W,W,F],
         [W,W,W,X,W,W],
         [W,W,W,W,W,W]]
ROWS = len(FIELD)
COLS = len(FIELD[0])

START_POS  = [(i, line.index(S)) for i, line in enumerate(FIELD) if S in line][0]
FINISH_POS = [(i, line.index(F)) for i, line in enumerate(FIELD) if F in line][0]
STEPS      = sum(line.count(W) for line in FIELD) + 1

print("Start:", START_POS, "\nFinish:", FINISH_POS, "\nTotal steps:", STEPS)

def do_step(level, path, points):
    global FIELD
    r, c = points[-1]   
    if r<0 or c<0 or r>=ROWS or c>=COLS or FIELD[r][c] == X:
        return
    if level == STEPS and (r, c) == FINISH_POS:
        print("Found path:", path) 
        yy, xx = zip(*points)
        plt.plot(xx, yy, "-ok")
        plt.gca().invert_yaxis()
        plt.show()
        exit()

    current = FIELD[r][c] 
    FIELD[r][c] = X      
    for dr, dc, dir in ((-1,0,'^'), (0,1,'>'), (1,0,'v'), (0,-1,'<')):
        do_step(level+1, path+dir, points+[(r+dr,c+dc)])
    FIELD[r][c] = current 
do_step(0, "", [START_POS])
print("No path's found.")