人工智能-A*算法求解八数码问题

➢在一个3×3的九宫中有1-8这8个数字以及一个空格随机摆放在其中的格子里。将该九宫格调整到目标状态。
➢规则:每次只能将与空格(上、下、左、右)相邻的一个数字移动到空格中。试编程实现这一问题的求解。
➢备注:为了程序中表示方便,用0代替空格。
➢初始状态和目标状态:均由用户通过键盘手工输入或者从文件读入(不可以写死在程序里面)。
➢实验结果需要包含以下初始状态和目标状态的结果(checkyouranswer:至少需要移动15步)。
其中代价函数选的是错位的数字,估价函数是步数加错位的数字,输出放在文件中,文件名请自行更改。

def solution(str1,strend,h1):
    list1=[str1]#存放所有的节点
    routelist=[('',0,h1,h1)]#存放操作步骤,元组表示(父节点,深度(n),错位数字(h),深度加错位总和)
    #closelist=[]#存放已经选过的节点
    openlist=[]#存放有可能被选中的节点
    str2=str1
    str4=""
    list2=[]
    #j=0#列表位置
    while(True):
        p=list1.index(str2)
        n=routelist[p][1]+1
        m=str2.index("0")#0所在位置
        if m//3!=0:#上移条件是否成立
            #上移
            str3=list(str2)
            str3[m],str3[m-3]=str3[m-3],str3[m]
            str3=''.join(str3)
            #
            if str3 not in list1:
                h = 0
                if int(str3[8]) != 0:
                    h += 1
                for i in range(0, 8):#判断错位的数字个数
                    if int(str3[i]) != i+1:
                        h += 1
                    else:
                        continue
                list1.append(str3)#加入到已出现的状态中
                routelist.append((p,n,h,n+h))
                openlist.append(
  • 0
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值