15 Puzzle (4乘4谜题) IDA*(DFS策略与曼哈顿距离启发) 的C语言实现

本文介绍了作者使用C语言和IDA*(基于迭代加深的A*算法)来解决15 Puzzle(4乘4迷题)的实现过程。文章详细讨论了算法原理,包括15 Puzzle的背景、简单的穷举算法、不走回头路的优化,以及IDA*算法与启发式方法(曼哈顿距离)的结合。此外,还分享了实验结果和相关资源链接。
摘要由CSDN通过智能技术生成

大家好!这是我的第一篇博客,由于之前没有撰写博客的经验,并且也是初入计算机和人工智能领域,可能有些表述或者理解不当,还请大家多多指教。

 

一、撰写目的

  由于这个学期在上算法与数据结构课程的时候,其中一个大作业是用C语言和深度优先(DFS)的 IDA*(基于迭代加深的A*算法)实现快速寻求15Puzzle(4乘4迷题)的解法的工具,同时尽可能地加入优化使得算法尽可能快速、简练。我发现网上很少有关于利用IDA*去解决15乃至24Puzzle的介绍,于是我就想跟大家分享一下自己的学习经验和解决方法,文章中大多理念都是有我自己归纳总结的地方,只是为了给大家粗略地介绍一下并不能涵盖这些知识的全部方面,希望能给大家一点帮助。

 

二、15Puzzle(4乘4迷题)及其一般算法简介

  1. 15-Puzzle:15Puzzle(4乘4迷题)看似陌生,但其实肯定每个人都知道甚至玩过类似的衍生游戏,在此我们以15Puzzle为例给大家介绍。15Puzzle是一个由16个宫格以4乘4方式排列的组成的图案,通常是以益智类游戏的方式出现,16个宫格中有15个具有数字编号或图案,剩下一个为空格。当16个格子按照一定顺序排列成为“最终状态”时,其数字编号也会按照顺序排列,或是其图案会一个大的图片,如下方就是数字形式的15Puzzle的“最终状态”:

B  1   2   3

4  5   6   7

8  9  10  11

12 13 14 15

  注:B代表空格子,B可位于任何一个角落,取决于不同的游戏规则

  在游戏初始状态时,所有宫格为乱序排列,如:

14  13  15  7

11  12   9  5

6   B   2  1

4   8  10  3

  一次移动中,玩家只可以将空格(B)与其相邻的某个格子互换位置,达到一个新的状态。如上图第一步只可能为将B与12,6,2,或8交换位置。玩家若通过多次移动,将全部宫格恢复到“最终形态”后,游戏即结束,为了方便起见,在程序中我们采用0代替B。

  为了直观地说明算法时间复杂度的差异,在这里我采用了6组随机但必有解的初始状态,分别为:

N 初始状态
1 14 13 15 7 11 12 9 5 6 0 2 1 4 8 10 3 
2 13 5 4 10 9 12 8 14 2 3 7 1 0 15 11 6 
3 14 7 8 2 13 11 10 4 9 12 5 0 3 6 1 15 
4 5 12 10 7 15 11 14 0 8 2 1 13 3 4 9 6 
5 7 6 8 1 11 5 14 10 3 4 9 13 15 2 0 12 
6 15 2 12 11 14 13 9 5 1 3 8 7 0 10 6 4 

  注:每个初始状态用数列表示ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值