• 大小: 5KB
    文件类型: .py
    金币: 2
    下载: 1 次
    发布日期: 2021-06-17
  • 语言: Python
  • 标签: 源码  python  

资源简介

骑士周游问题,采用多种方法解决骑士周游问题,如有其它需要,请留言

资源截图

代码片段和文件信息

#骑士周游问题
#递归方法,这种方法,我电脑的配置计算6*6的棋盘就十分困难
def knight_1(x y n):
    move_pace = {(21) (2-1) (12) (1-2) (-21) (-2-1) (-12) (-1-2)}
    solutions = []
    #下面这个函数获取当前位置所有可能下一步,并返回所有新位置构成的列表
    def posible_position(pos state):#state 中存储已经走过的位置
        posible_pos = []
        for pace in move_pace:
            new_pos = (pos[0]+pace[0] pos[1]+pace[1])
            if new_pos not in state and 0 <=new_pos[0]                 posible_pos.append(new_pos)
        return posible_pos
    #递归函数
    def knight(state = ((xy))):
        if len(state) == n*n:
            #print(state)
            solutions.append(list(state))
            return True
        else:
            for pos in posible_position(state[-1] state):
                knight(state + (pos))
    knight()
    return solutions
#这个方法也不好
#只能运行6格棋盘
#非递归方法
def knight_2(x y n):
    move_pace = [(21) (2-1) (12) (1-2) (-21) (-2-1) (-12) (-1-2)]
    st = ESStack()
    state = ((x y))
    st.push((state0))
    def posible_pace(pace state):
        new_pos = (state[-1][0]+pace[0] state[-1][1]+pace[1])
        if new_pos not in state and 0 <=new_pos[0] < n and 0 <=new_pos[1] < n:
            return new_pos
        return False
    while not st.is_empty():
        state pace_index = st.pop()
        if len(state) == n*n:
            print(“find“)
            return state
        for pace in range(pace_index 8):
            new_pos = posible_pace(move_pace[pace] state)
            if new_pos:
                st.push((state pace+1))
                st.push((state + (new_pos) 0))
                #print(st.top())
                break
#这个稍微优化一点,换汤不换药,只是避免了每次都把走过的路径亚入栈中
#仍然只能计算到6
def knight_3(x y n):
    move_pace = [(21) (2-1) (12) (1-2) (-21) (-2-1) (-12) (-1-2)]
    st = ESStack()
    state = [(x y)]
    st.push(((xy)0))
    count = 0
    def posible_pace(pace state):
        new_pos = (state[-1][0]+pace[0] state[-1][1]+pace[1])
        if new_pos not in state and 0 <=new_pos[0] < n and 0 <=new_pos[1] < n:
            return new_pos
        return False
    while not st.is_empty():
        count += 1
        pos pace_index = st.pop()
        #print(state)
        if len(state) == n*n:
            prin

评论

共有 条评论