- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
八数码问题
问题描述
所谓八数码问题是指:将分别标有数字1,2,3,…,8的八块正方形数码牌任意地放在一块3×3的数码盘上。放牌时要求不能重叠。于是,在3×3的数码盘上出现了一个空格。现在要求按照每次只能将与空格相邻的数码牌与空格交换的原则,将任意摆放的数码盘逐步摆成某种特殊的排列。2、问题分析
首先,八数码问题包括一个初始状态(strat) 和 目标状态(goal),所谓解八数码问题就是在两个状态间寻找一系列可过渡状态(strat- strat 1- strat 2-...-goal)。这个状态是否存在就是我们要解决的第一个问题。如下是初使状态到目标状态图:(0表示空格)
1
2
3
4
5
6
7
8
0
1
2
3
7
4
5
8
0
6
图1
数据结构
定义结构体Node如下:
typedef struct{
int num[9];
char cur_expension; //记录是否可以扩展,Y代表可以扩展,N代表不可以。
char Operate; //表示不可以执行的操作,L代表不能左移,R代表不能右移,
//U代表不能上移,D代表不能下移,C代表可以任意移动。
int father; //记录父节点的下标。
}Node;
Node state[MAXSIZE]; //将搜索过的状态存储于该数组中。
4、广度优先搜索
广度优先搜索是指按节点的层次进行搜索,本层的节点没有搜索完毕时,不能对下层节点进行处理,即深度越小的节点越先得到扩展,也就是说先产生的节点先得以扩展处理,直至找到目标为止。求解八数码问题的搜索过程:如图2所示,把所有可能的算符应用到开始节点(即空格上移、空格左移、空格右移、空格下移),图2只是演示了两个扩展结点,如此继续下去,直到发现目标节点。
1 2 34 5 6 7 8 0
1 2 3
4 5 6
7 8 0
图2
变量定义及函数说明:
#define SUM 100//限定只搜索前50步,50步以后如果仍然没有搜索到结果,认为无解。
#define MAXSIZE 200 // 宏定义最大数组长度
int n=1; //用来记录搜索的步骤
int goal[9]={1,2,3,7,4,5,8,0,6};//所要达到的最终状态,0代表空格。
int same(int temp); //判断是否达到了目标状态。
void printgoal(); //输出搜索结果。
int left(int temp); //将空格进行左移操作。
int right(int temp); //将空格进行右移操作。
int up(int temp); //将空格进行上移操作。
int down(int temp); //将空格进行下移操作。
void init(); //初始状态参数设置
程序运行结果:从初始状态到目标状态走了42步。
6、源程序如下:
//*****************************************************
//程序名: game.cpp *
//作 者:杨凤芝 *
//编写时间:2009年11
//程序功能:八数码问题 *
//*****************************************************
#include iostream
#include stdlib.h
using namespace std;
int same(int temp); //判断是否达到了目标状态。
void printgoal(); //输出搜索结果。
int left(int temp); //将空格进行左移操作。
int right(int temp); //将空格进行右移操作。
int up(int temp); //将空格进行上移操作。
int down(int temp); //将空格进行下移操作。
void init(); //初始状态参数设置
#define SUM 100//限定只搜索前100步,100步以后如果仍然没有搜索到结果,认为无解。
#define MAXSIZE 200
int n=1;
int goal[9]={1,2,3,7,4,5,8,0,6};//所要达到的最
您可能关注的文档
- 8《自相矛盾》教学设计梁垛镇小学丁华.doc
- 8B Unit 6 Sunshine for all期末复习必备词句(精华版).doc
- 8B Unit 8 短语及重要句子.doc
- 8B完型填空专练.doc
- 8m通道桥施工方案.pdf
- 8T吊车起重参数.doc
- 8棒材轧制过程中的棒芯质量问题与控制技术.doc
- 8不参与影响和危害社会安全的活动.doc
- 8大气环流原理的应用.doc
- 8大职场生存法则.doc
- 鹤壁山城鹤鑫化工有限责任公司“9·29”较大中毒事故调查报告.pdf
- 露天矿山边坡稳定性分析评估工作指南.doc
- 汽车先进动力系统技术发展报告(2025版).pdf
- 中国人寿财产保险股份有限公司福建省(不含厦门)商业性奶牛养殖淘汰保险条款.doc
- 1.3 美国内战 课件 2025--2026学年统编版九年级历史下册.pptx
- 4.14 法西斯国家的侵略扩张 课件 2025-2026学年统编版九年级历史下册.pptx
- 6.21 冷战后的世界格局 课件 2025---2026学年统编版九年级历史下册.pptx
- 第14课《古诗二首 绝句》-课件-2025-2026学年二年级语文下册统编版.pptx
- 19.《蜘蛛开店》--(课件)-2025-2026学年二年级语文下册统编版.pptx
- 18.《大象的耳朵》第2课时(课件)-2025-2026学年二年级语文下册统编版.pptx
原创力文档


文档评论(0)