问题1:DFS
def depthFirstSearch(problem):
visited_node = []
stack_node = util.Stack()
result = []
if problem.isGoalState(problem.getStartState()):
return []
stack_node.push((problem.getStartState(), []))
while not stack_node.isEmpty():
node = stack_node.pop()
if node[0] in visited_node:
continue
visited_node.append(node[0])
result = node[1]
if (problem.isGoalState(node[0])):
return result
for record in problem.getSuccessors(node[0]):
child = record[0]
action = record[1]
sub_result = list(result)
if not child in visited_node:
sub_result.append(action)
stack_node.push((child, sub_result))
return result
util.raiseNotDefined()
问题2:BFS
def breadthFirstSearch(problem):
visited_node = []
queue_node = util.Queue()
result = []
if problem.isGoalState(problem.getStartState()):
return []
queue_node.push((problem.getStartState(), []))
while not queue_node.isEmpty():
node = queue_node.pop()
if node[0] in visited_node:
continue
visited_node.append(node[0])
result = node[1]
if (problem.isGoalState(node[0])):
return result
for record in problem.getSuccessors(node[0]):
child = record[0]
action = record[1]
sub_result = list(result)
if not child in visited_node:
sub_result.append(action)
queue_node.push((child, sub_result))
return result
util.raiseNotDefined()
问题3:UCS
def uniformCostSearch(problem):
visited_node = []
priorityQueue_node = util.PriorityQueue()
result = []