资源简介
人工只能作业,利用python实现深度优先搜索解决八数码问题,测试通过,
代码片段和文件信息
“““
深度优先搜索解决八数码问题
“““
GOAL = ‘‘‘1-2-3
8-e-4
7-6-5‘‘‘
INITIAL = ‘‘‘1-e-3
7-2-4
6-8-5‘‘‘
# INITIAL = ‘‘‘2-8-3
# 1-6-4
# 7-e-5‘‘‘
# 将状态字符串转化为列表
def string_to_list(input_string):
return [x.split(‘-‘) for x in input_string.split(‘\n‘)]
# 将状态列表转化为字符串
def list_to_string(input_list):
return ‘\n‘.join([‘-‘.join(x) for x in input_list])
# 获取e的坐标
def get_location(rows input_element):
for i row in enumerate(rows):
for j item in enumerate(row):
if item == input_element:
return i j
# 找空格的左、上、右、下四个位置的元素
def get_actions(cur_state):
rows = string_to_list(cur_state)
row_empty col_empty = get_location(rows ‘e‘)
actions = []
if col_empty > 0: # 可左移
actions.append(rows[row_empty][col_empty - 1])
if row_empty > 0: # 可上移
actions.append(rows[row_empty - 1][col_empty])
if col_empty < 2: # 可右移
actions.append(rows[row_empty][col_empty + 1])
if row_empty < 2: # 可下移
actions.append(rows[row_empty + 1][col_empty])
return actions
# 移动一个数字返回移动成功后的状态字符串及其父状态
def get_result(state action):
rows = string_to_list(state)
row_empty col_empty = get_location(rows ‘e‘) # 获得当前状态中的空格的坐标值
row_new col_new = get_location(rows action)
##交换空格和数字的位置
rows[row_empty][col_empty] rows[row_new][col_new] = rows[row_new][col_new] rows[row_empty][col_empty]
return list_to_string(rows) state action
# 是否到达目标状态
def is_
- 上一篇:人工鱼群算法求函数的最大值
- 下一篇:宽度优先算法
评论
共有 条评论