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的路径直接放弃搜索
运气比较好,深度搜索的方向比较贴合方向,很快就搜索出来了.