第1关:广度优先搜索
#函数部分
def PlayMazz(mazz, start, end):
'''
走迷宫,从start走到end
:param mazz: 图
:param start: 图的起点
:param end: 图的出口
'''
# queue为队列,当队列为空或者当前地点为H时搜索结束
visited, queue = set(), [start]
#********* Begin *********#
while queue:
# 从队列中出队,即当前所处的地点
vertex = queue.pop(0)
if vertex not in visited:
visited.add(vertex)
print(vertex, end='')
#当走到出口时结束算法
if vertex == end:
return
# 将当前所处地点所能走到的地点放入队列
for v in mazz[vertex]:
if v not in visited:
queue.extend(v)
#********* End *********#
第2关:深度优先搜索
#dfs搜索
def PlayMazz(graph, start,end, visited=None):
'''
深度优先搜索,从1走到9
:param graph: 搜索的空间
:param start: 开始搜索的起点
:param visited: 已经搜索过的点集合
'''
if visited is None:
visited = set()
visited.add(start)
print(start, end='')
# 当前地点为终点时结束搜索
if start == end:
return
#********* Begin *********#
# 看看当前位置有哪些路可以走,如果能走并且之前没有走过就走
for v in graph[start]:
if v not in visited:
PlayMazz(graph, v, end,visited)
#********* End *********#
第3关:盲目搜索算法的应用
#算法文件(student.py)
# -*- coding:utf-8 -*-
class Solution:
def __init__(self, n=0):
self.vis = [[]] #用于标记是否存在皇后的二维列表(初始值全为0)
self.ans = 0 #用于存储答案(N皇后方案数,初始值0)
self.n = n #用于存储皇后数量n
def solveNQueens(self):
"""求解N皇后问题(调用self.DFS函数)
:rtype: self.ans: int #返回N皇后放置方案数
"""
#请在这里补充代码,完成本关任务
#********** Begin **********#
self.vis = [[0 for j in range(50)] for i in range(3)]
self.ans = 0
self.DFS(1, self.n)
return self.ans
#********** End **********#
def DFS(self, row, n):
"""深度优先搜索N皇后问题的解空间
:type: row: int #NxN棋盘的第row行
:type: n: int #皇后数量n
:rtype: None #无返回值
"""
#请在这里补充代码,完成本关任务
#********** Begin **********#
if row == n+1:
self.ans += 1
return
for i in range(1,n+1,1):
if self.vis[0][row-i+n]==0 and self.vis[1][i]==0 and self.vis[2][row+i]==0 :
self.vis[0][row-i+n] = self.vis[1][i] = self.vis[2][row+i] = 1
self.DFS(row+1, n)
self.vis[0][row-i+n] = self.vis[1][i] = self.vis[2][row+i] = 0
#********** End **********#