python简单编程八数码问题
实现结果:给定八数码的起始状态和目标状态,程序可以自动计算出所需要的步数,并能打印出每一步的变化。
使用深度搜索
import time as tm
g_dict_layouts = {
}
#每个位置可交换的位置集合
g_dict_shifts = {
0:[1, 3], 1:[0, 2, 4], 2:[1, 5],
3:[0,4,6], 4:[1,3,5,7], 5:[2,4,8],
6:[3,7], 7:[4,6,8], 8:[5,7]}
def swap_chr(a, i, j):
if i > j:
i, j = j, i
#得到ij交换后的数组
b = a[:i] + a[j] + a[i+1:j] + a[i] + a[j+1:]
return b
def solvePuzzle_depth(srcLayout, destLayout):
#先进行判断srcLayout和destLayout逆序值是否同是奇数或偶数
#这是判断起始状态是否能够到达目标状态,同奇同偶时才是可达
src=0;dest=0
for i in range(1,9):
fist=0
for j in range(0,i):
if srcLayout[j]>srcLayout[i] and srcLayout[i]!='0':#0是false,'0'才是数字
fist=fist+1
src=src+fist
for i in range(1,9):
fist=0
for j in