八数码问题 python实现 DFS深度优先搜索

DFS跟BFS的代码几乎一致,尤其是在使用python实现的时候

def DFS():
    deq = []
    appear = set()#使用set进行检索极快,hash检索
    temp = board()
    appear.add(list2str(temp.groud))
    for x in temp.can_move():
        b = board()
        b.move_one(x)
        b.route.append(x)
        appear.add(list2str(b.groud))
        deq.append(b)
    flag = 0
    while True:
        flag+=1
        temp = deq.pop()
        if flag%10000==0:
            flag=0
            temp.show_board() 
            temp.show_route()

        if  temp.guiwei():
            temp.show_board() 
            temp.show_route()
            break
        for x in temp.can_move():
            # 筛选掉重复的棋盘情况,加快搜索速度
            if list2str(temp.test(x)) not in appear and len(temp.route)<=99:
                new_temp=copy.deepcopy(temp)
                new_temp.move_one(x)
                new_temp.route.append(x)
                deq.append(new_temp)
                appear.add(list2str(new_temp.groud))   

区别于BFS

  • 使用栈作为数据结构,先进后出.在代码上的体现很简单,把pop(0)改成pop()就好
  • 如果不限制的话,深度优先搜索会无限制的一直往下搜索,路径在到达终点前只会越来越长.所以我限制了超过100的路径直接放弃搜索
    八数码问题 python实现 DFS深度优先搜索_第1张图片
    运气比较好,深度搜索的方向比较贴合方向,很快就搜索出来了.

你可能感兴趣的:(人工智能)