ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:17.30KB ,
资源ID:14379946      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/14379946.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数字华容道问题的设计与实现Word文件下载.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数字华容道问题的设计与实现Word文件下载.docx

1、由文件 input.txt 给出输入数据。文件的第 1 行有 1 个正整数 n。以下的 n 行是 nn 方格阵列的中数字 1n2-1 的初始排列,每行有 n 个数字表示该行方格中的数字, 0 表示空格。结果输出:将计算出的最少移动次数和相应的移动序列输出到文件 output.txt。第 1 行是最少移动次数。从第 2 行开始,依次输出移动序列。三、源程序关键代码#includemalloc.hstdlib.h#define Overflow 1#define N 3int goalNN=1,2,3,8,0,4,7,6,5;int zero2,NodeQTY=0;int *z=zero;/记录0

2、的位置,zero0:r行;zero1:c列 typedef int Piece;struct Chessboard/棋盘信息 Piece posNN;/记录每个数码a的位置r行c列 int d,f,move;/d:深度;f:启发函数值 ;move:父节点移动到该节点的方式 ;struct LNode Chessboard board; LNode *parent,*next; bool flag;typedef LNode* List;int* Findzero(LNode* &Node) int i,j,zr2; int *z=zr; for(i=0;iN;i+) for(j=0;jboar

3、d.posij=0) zr0=i+1; zr1=j+1; break; return z;int Wrong(LNode *Node) int w=0,i,j;board.posij!=goalij&Node-=0) w+; return w;int pick(LNode *Node) int w=0,i,j,ii,jj;=0) for(ii=0;iiii+) for(jj=0;jjboard.posij=goaliijj) w=w+abs(ii-i)+abs(jj-j); break; LNode* extend(LNode *Node,int depth,int zero2,int mov

4、eflag,int Choose) LNode* NewNode=new LNode; for(int i=0; for(int j=0; NewNode-board.posij=Node-board.posij; switch(moveflag) case 1: /向左移,不能出界:zero1=2 NewNode-board.poszero0-1zero1-1=NewNode-board.poszero0-1zero1-2;board.poszero0-1zero1-2=0; case 2: /向右移,不能出界:zero1board.poszero0-2zero1-1;board.posze

5、ro0-2zero1-1=0; case 4: /向下移,不能出界:zero0board.d=depth+1; switch(Choose)NewNode-board.f=NewNode-board.d+Wrong(NewNode);break;board.d+pick(NewNode); board.move=moveflag;parent=Node; NodeQTY+; return NewNode;void InitList(LNode* &Open,LNode* &Close) Open=(List)malloc(sizeof(LNode); Close=(List)malloc(si

6、zeof(LNode); if(!Open&! exit(Overflow); Open-next=NULL; Close-int ListInsert(List &L,LNode* NewNode) List p=L; while(p-next) p=p-next;next=p- p-next=NewNode; return true;LNode* Getminf(List &L) List p=L,q=L-next,r=L,min; min=q;/p,q寻找f最小值的指针,r指向表L中min前一个元素 q) return NULL; while(q) if(min-board.fq-boa

7、rd.f) r=p; min=q; p=q; q=q- r-next=min- min- return min;int main() int i,j,choose; List Open,Close; LNode *Best,*current; LNode *Start=new LNode; printf(ttt八 数 码 问 题 求 解n);n请输入初始状态: scanf(%d,&(Start-board.posij);(注:The flag of movement-1:左移;2:右移;3:上移;4:下移)n初始棋盘状态:n printf(|%d,Start-board.posij); pri

8、ntf(|n InitList(Open,Close);请选择(1:A算法;A*算法): scanf(choose); Start-board.d=0; switch(choose)Start-board.f=Start-board.d+Wrong(Start);board.d+pick(Start); / Start-board.f=0+Wrong(Start); Start-board.move=0;parent=NULL;flag=1; ListInsert(Open,Start);/将S加入到Open表中 while(Open- Best=Getminf(Open); ListInsert(Close,Best); if(!(Best-board.f-Best-board.d)$*有解!*$n break; z=Findzero(Best); zero0=*(z+0);zero1=*(z+1); if(zero1=N-1&Best-board.move!=2) ListInsert(Open,extend(Best,Best-board.d,zero,1,choose); if(zero1=1) ListInsert(Open,extend(Be

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1