8数码问题的C++解决方案

引子:我接触8数码问题是在研一的时候上的《人工智能》课上,在某一章节介绍完深度优先搜索、广度优先搜索、贪婪搜索、A*搜索四种经典搜索策略以后,章节后面的一道习题便是让学生编程求解8数码问题。书上并未给出答案,我当时用不同的搜索策略分别实现了程序求解,但是普遍效率不高。这两天闲来无事,再把以前的程序翻出来看,决定重写一个。

程序界面:下图是程序运行的界面,程序从用户指定的状态开始搜索,直到找到目标状态。

在8数码问题中,只有空格(用数字0表示)可以移动,它每移动一步就是和相邻的一个数码交换一次位置。

上图左边的控制台上显示得的是(空格的)移动过程,经过20步以后达到目标状态,如上图右侧所示。顺便说下,鄙人的电脑是11年的ThinkPad E520,2.2GHz的i3处理器,32位win7系统。

代码细节:关于8数码问题的一个重要结论是[1]:两个不同的状态序列的逆序数,若奇偶性一致,则二状态可以互达,否则不能互达。示例:状态序列230148675的逆序数(0不考虑)是1+1+3+1+1=7.

算法C++源代码和编译过的(win7&winXp)exe文件均上传到了csdn资源,点此下载

程序提供3中搜索模式可以在函数调用中确定:第一种是宽度优先搜索,搜索效率低(意味着需要更多的搜索时间和内存空间),但是保证找到全局最优解(步数最少);第二种是完全的启发式搜索,根据每个节点当前状态到目标状态的相似性来决定优先扩展哪个节点,该方法速度最快,但是一般找不到全局最优解;第三种方法是结合宽度优先的启发式搜索,即在启发函数中加入节点深度信息,这样的话再选择某个节点时需同时考虑其节点深度以及和目标的相似性,该方法搜索时间介于前两种方法之间,但是有很大概率找到全局最优解。上图显示的结果就是使用的第三中搜索策略得到的。

程序提供2种启发式函数:第一种是计算有多少个不在正确位置上的数码的个数来作为当前节点和目标节点的相似性度量;第二种是为每个错误放置的数码,计算其到正确位置的城市距离,由这些距离之和作为相似性度量。上图的示例程序就是采用第二种启发式。为了计算效率,我将启发式函数的选择用宏来定义,如果需要修改启发函数,则需要修改一个宏变量,并重新编译程序。

程序中保留了大多的灵活性:除了搜索模式和启发式函数可以修改以外,还可以定义不同的目标状态,如果需要以任意状态为目标,则需要:1)修改一个宏变量并重新编译程序(修改方法代码中有说明),使得代码允许其它的目标状态;2)在运行时,在main函数里设置新的目标状态。

需要说明的是:本文示例图中的目标状态在计算上是最快捷的,首先取数很方便,一般地查看目标在第i个位置上的值,则需要访问数组goal[i],而这里goal[i]==i,故而无需访问数组;第二,要想知道数码n的目标位置,则需要找到goal[i]==n,然后row=i/3,col=i%3. 但是这里的话,row=n/3,col=n%3. 当我们用8位无符号整型来表示各个数码值(0~8)时,n/3和n%3操作是非常快的,比访问数组还快。

程序还提供一种玩游戏模式,即用户自己通过W,S,A,D四个键分别控制空格往上、下、左、右四个方向移动一步,功能很简单,界面部分是用opencv做的。界面部分和搜索部分是完全分离的,demo文件中main函数部分显示了如何将它们组合使用。

参考文献:

[1] 用MFC动态编程实现8数码问题求解

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-01 18:05:52

8数码问题的C++解决方案的相关文章

ug nx8.0免费版下载 含64位/32位

来自Siemens PLM Software 的NX 使企业能够通过新一代数字化产品开发系统实现向产品全生命周期管理转型的目标.NX 包含了企业中应用最广泛的集成应用套件,用于产品设计.工程和制造全范围的开发过程. 如今制造业所面临的挑战是,通过产品开发的技术创新,在持续的成本缩减以及收入和利润的逐渐增加的要求之间取得平衡.为了真正地支持革新,必须评审更多的可选设计方案,而且在开发过程中必须根据以往经验中所获得的知识更早地做出关键性的决策. NX 是Siemens PLM Software 新一

【项目管理】Pmo的困惑问题和解决方案

随着项目管理知识体系90年代末被引进中国,20世纪初PMO开始逐步建立.由于PMO在国内发展时间较短, 除少数大型规范化管理IT企业PMO取得了一定的成绩外(如联想.神州数码等,已发展成控制型PMO或战略级PMO),大多数企业的PMO仍处于尴尬的境地.大部分处于初建或成熟度不高的摸索阶段,在PMO的运营与管理过程中,常常遭遇很多问题与困境.常见问题主要有以下六个方面: (一)缺乏管理层强有力的支持 通过调研可以了解到,这一点是目前许多PMO从业人员的普遍困惑,一方面在公司里他们常常感觉到公司领导

神州数码首席IT专家郑小维:走向云中新IT的两次大转身

(上图为神州数码首席IT专家郑小维) 当前,每个人都处在一个巨变的时代,这个巨变的时代不仅意味着技术在变.行业在变,每个人的生活和工作方式也在变.神州数码集团首席IT专家郑小维在2016 IT价值峰会上表示,现在所做的事情是对前十年的一个颠覆,是企业信息化的二次革命.传统IT在新一代技术大环境下,要向新一代IT转变,那就是云中新IT. 神州数码的两次IT转型 郑小维介绍说,从2000年开始神州数码IT经历了两次大变革:第一次大变革是从技术型IT到服务型IT的转变,IT不再只是技术而更是服务:第二

回归A股的神州数码集团,要在云计算时代重建IT生态

(上图为神州数码集团股份有限公司董事长郭为) 4月25日,神州数码集团(000034.SZ)宣布成功登陆A股,并将打造中国最大的IT新生态.2015年8月,神州控股(00861.HK)宣布将分销和系统业务有条件出售给国内A股上市公司深信泰丰(000034.SZ),2016年4月25日,深信泰丰A股上市公司名称正式更名为神州数码集团股份有限公司,证券简称正式更名为神州数码,神州数码集团正式成功登陆A股. 神州数码集团股份有限公司董事长郭为表示:在国内A股上市是神州数码发展战略的关键点,通过A股上市

郭为6年想明白了云计算,用融合服务再造神州数码

(上图为神州控股董事局主席.神州数码集团董事长郭为) 2010年,在成都近2000人的合作伙伴大会上,神州数码宣布向智慧城市转型.如今,神州数码已成为了智慧城市专家."当时很多人不理解,不知道我们要做什么,最困难的是企业内部很多同事也不理解."郭为在2017年4月20日西安神州数码2017合作伙伴大会上感慨. 这一次西安合作伙伴大会距离上一次成都合作伙伴大会时隔整整七年."为什么花了七年的时间,才又再次开了这个大会?这是一个思想观念.人才与技术转变的过程."郭为说.

Citrix NetScaler 全局负载均衡解决方案

Citrix NetScaler 全局负载均衡解决方案 思杰(Citrix)系统亚太有限公司 2008年5月 目 录 第1章 项目概述... 3 第2章 思杰系统(Citrix)公司简介... 4 2.1. 关于思杰系统(Citrix)公司... 4 2.2. 产品与服务... 6 2.3. 思杰 NetScaler产品... 7 2.4. 成功案例... 9 第3章 全局负载均衡技术方案... 13 3.1. 设计原则... 13 3.2. 详细技术设计... 13 3.3. 动态域名解析工作

主流芯片解决方案Ambarella的高清网络摄像机、德州仪器和控制海思

(本文由四川艾普作为数码科技有限公司 苏斌.范清华 收集) 高清网络视频监控发展到今天.正的高清时代.诸多有实力的高清摄像机厂家的产品线也逐渐完好起来,高清网络视频监控的配套产品有更加丰富和成熟.与此同一时候困扰非常多人的高清网络摄像机与后端平台或者与后端NVR互联互通的问题也在逐渐迎刃而解,这得益于各个方案研发公司.生产厂家.平台商.标准协议组织都不遗余力的在网络摄像机协议对接这块投入了大量精力,使得高清网络摄像机与第三方设备或者软件平台的对接不再像早期那么尴尬.现阶段面向市场的高清推广商以及

WIFI内部通话系统技术解决方案

一.内部通话系统 单位内部通话系统可以节约话费,使用方便,提高效率,安全保密.随着内部局域网的普及,通过内部局域网络电话作为承载的内部通话系统越来越收到青睐.这种方式充分利用了现有数据网络的富余带宽,最大化发挥了基础网络优势,优化了资源利用. 简捷CNX系列IP电话交换机及WIFI IP电话机可以为300用户的内部通话系统提供解决方案,是高性价比和高稳定性的杰出解决方案. 1.设计思路 a)      统一规划 内部电话系统是一个覆盖总部和各分支的电话网络,其建设需要统一规划.分步实施的原则.确

西安华科云终端 玩转酒店数码客房

西安华科云终端http://www.sharevdi.cn,联系方式:4006683769,带你玩转酒店数码客房.在信息化蓬勃发展的今日,人们的日常生活与网络.信息结合的越来越紧密,频繁的商旅活动更是将酒店等服务行业推至高峰.面对屡屡发生酒店负面事件,酒店顶着巨大的舆论压力,力求将酒店管理服务做到最好.客房作为酒店组成的主体,是客人在酒店中停留时间最长的地方,是客人临时的“家”.如何将客房信息化做到极致,提供更便捷贴心的服务?成为了每个酒店决策者考量的重点.下面西安华科云终端分析解答下这个难题,