栈和队列_迷宫问题_栈和回朔法

来源:互联网 发布:浴霸哪个牌子好 知乎 编辑:程序博客网 时间:2024/06/08 06:50
#迷宫问题---栈和队列#继承ValueErrorclass StackUnderflow(ValueError):    pass#定义一个栈class SStack():    def __init__(self):        self._elems = []    def is_empty(self):        return self._elems == []    def top(self):        if self._elems == []:raise StackUnderflow('in SStack.top()')        return self._elems[-1]    def push(self,elem):        self._elems.append(elem)    def pop(self):        if self._elems==[]:raise StackUnderflow('in SStack.top()')        return self._elems.pop()#定义mazeline_0 = [1,1,1,1,1,1,1]line_1 = [1,1,0,1,0,1,1]line_2 = [1,1,0,1,0,1,1]line_3 = [1,1,0,0,0,1,1]line_4 = [1,1,0,1,0,0,1]line_5 = [1,1,0,1,1,1,1]line_6 = [1,1,1,1,1,1,1]maze=[line_1,line_1,line_2,line_3,line_4,line_5,line_6]#方向dirs = [(0,1),(1,0),(0,-1),(-1,0)]def mark(maze,pos):    #定义到过了=2  maze是迷    maze[pos[0]][pos[1]]  = 2def passable (maze,pos):    return maze[pos[0]][pos[1]] == 0#赞def maze_solver(maze,start,end):    if start == end:        print (start)        return    st =[]    mark(maze,start)    st.append((start,0))    while not st==[]:        pos,nxt = st.pop()        for i in range(nxt,4):            nextp=(pos[0]+dirs[i][0],pos[1]+dirs[i][1])            print (nextp)            if nextp == end:                print (st)                return            if passable(maze,nextp):                st.append((pos,i+1))                mark(maze,nextp)                st.append((nextp,0))                breakmaze_solver(maze,[5,2],(4,5))
0 0
原创粉丝点击