第1关:广度优先搜索

编程要求

根据提示补全右侧编辑器 Begin-End 区间的代码,输出根据广度优先遍历后的节点次序。

测试说明

平台会对你编写的代码进行测试:
测试输入:
{‘mazz’:{‘A’: [‘B’, ‘C’],’B’: [‘D’, ‘E’],’C’: [‘F’],’F’: [‘G’, ‘H’],’D’: [],’E’: [],’G’: [],’H’: []},’start’:’A’,’end’:’D’}
预期输出:
ABCD

  1. def PlayMazz(mazz, start, end):
  2. '''
  3. 走迷宫,从start走到end
  4. :param mazz: 图
  5. :param start: 图的起点
  6. :param end: 图的出口
  7. '''
  8. # queue为队列,当队列为空或者当前地点为终点时搜索结束
  9. visited, queue = set(), [start]
  10. ans = []
  11. #********* Begin *********#
  12. while queue:
  13. node = queue.pop(0)
  14. ans.append(node)
  15. if node==end:
  16. break
  17. for c in mazz[node]:
  18. queue.append(c)
  19. print(''.join(ans))
  20. #********* End *********#

第2关:深度优先搜索

编程要求

根据提示,补全右侧编辑器中 Begin-End 区间中 PlayMazz 函数中的代码,来实现对整棵树的深度优先搜索。

测试说明

平台会对你编写的代码进行测试:
测试输入:
{‘graph’:{‘A’:[‘B’,’E’],’B’:[‘C’,’D’],’C’:[],’D’:[],’E’:[]},’start’:’A’,’end’:’E’}
预期输出:
ABCDE

  1. def PlayMazz(graph, start,end, visited=None):
  2. '''
  3. 深度优先搜索,从1走到9
  4. :param graph: 搜索的空间
  5. :param start: 开始搜索的起点
  6. :param visited: 已经搜索过的点集合
  7. '''
  8. if visited is None:
  9. visited = set()
  10. # visited.add(start)
  11. # print(start, end='')
  12. # 当前地点为终点时结束搜索
  13. # if start == end:
  14. # return
  15. #********* Begin *********#
  16. # 看看当前位置有哪些路可以走,如果能走并且之前没有走过就走
  17. stack = [start]
  18. ans = []
  19. while stack:
  20. node = stack.pop(-1)
  21. if node in visited:
  22. continue
  23. ans.append(node)
  24. visited.add(node)
  25. if node==end:
  26. break
  27. for c in graph[node][::-1]:
  28. stack.append(c)
  29. print(''.join(ans))
  30. #********* End *********#

第3关:盲目搜索算法的应用

编程要求

本关的编程任务是,补全右侧编辑 Begin-End 区间的代码,使函数 solveNQueens 和函数 DFS 实现指定功能 ,具体要求如下:

  • 在 solveNQueens 中,利用 DFS 函数实现N皇后问题求解,并返回方案总数;
  • 在 DFS 中,利用深度优先搜索算法的思想,递归求解N皇后问题。

    测试说明

    平台会对你编写的代码进行测试:
    测试输入:1
    预期输出:1
    输入格式:整数,表示皇后数量。
    输出格式:整数,表示 N 皇后放置方案总数。
  1. # -*- coding:utf-8 -*-
  2. class Solution:
  3. def __init__(self, n=0):
  4. # self.vis = [[0]*n for _ in range(n)] #用于标记是否存在皇后的二维列表(初始值全为0)
  5. self.ans = 0 #用于存储答案(N皇后方案数,初始值0)
  6. self.n = n #用于存储皇后数量n
  7. def solveNQueens(self):
  8. """求解N皇后问题(调用self.DFS函数)
  9. :rtype: self.ans: int #返回N皇后放置方案数
  10. """
  11. #请在这里补充代码,完成本关任务
  12. #********** Begin ********#
  13. self.exit_column = set()
  14. self.exit_diagonal1 = set()
  15. self.exit_diagonal2 = set()
  16. self.DFS(0, self.n)
  17. return self.ans
  18. #********** End **********#
  19. def DFS(self, row, n):
  20. """深度优先搜索N皇后问题的解空间
  21. :type: row: int #NxN棋盘的第row行
  22. :type: n: int #皇后数量n
  23. :rtype: None #无返回值
  24. """
  25. #请在这里补充代码,完成本关任务
  26. #********** Begin **********#
  27. if row == n:
  28. self.ans += 1
  29. return
  30. for i in range(n):
  31. if i not in self.exit_column and i+row not in self.exit_diagonal1 and i-row not in self.exit_diagonal2:
  32. self.exit_column.add(i)
  33. self.exit_diagonal1.add(i+row)
  34. self.exit_diagonal2.add(i-row)
  35. self.DFS(row+1, n)
  36. self.exit_column.remove(i)
  37. self.exit_diagonal1.remove(i+row)
  38. self.exit_diagonal2.remove(i-row)
  39. #********** End **********#