1737棋牌源码 精品,八数码游戏(启发式搜索A算法)

    8位数字谜3×3九宫棋盘,把1-8个棋盘的数量,剩余的空间,只能通过移动棋盘到空间来改变棋盘的布局。问题解决了——给定初始布局(即初始状态)和目标布局(即目标布局)。状态)如何将棋盘从初始布局移动到目标布局解决方案路径——是使用广度优先搜索方法解决问题的合法步骤序列:建立用于表示问题state的数据结构3×3、*矩阵元素的矩阵S ij{0,1,...8};其中1小于I,j小于3,*0表示空白空间,数字1-8表示对应的棋牌。初始状态S0:23目标状态Sg:123 1 8 4 0 4 0 7 7 6 5形成操作符集:*直观方法——为每个棋牌开发一组棋牌可能的移动:左、上、右、下四种移动。这需要32个操作符。*简单的方法——只对空间进行这四个步骤,因为只有靠近空间的棋牌才能移动。*空间移动的唯一限制是它不能从che中移出。应用************************************************************************************************************************************************************************评估函数:f(n)=D(n)+W(n),其中:D(n)是n的深度n,w(n)不在位,然后w(n)<h*(n)。n)满足A*算法的约束条件。编程注意:1:前驱节点的深度和记录。队列队列首部和队列尾部元素的函数。(2)采用宽度优先搜索,然后从打开的表格中选择相对函数值最小的节点。注意,深度优先搜索不适合于在完全没有解决方案之前可以选择的分支。3:递归算法应用程序*/以下是代码:includelt;iostreamgt;includelt;cstdlibgt;使用名称空间std;int sum=0定义N 1000;int=0,步长=0;int m=0,ta=0;int ZuiHui{n};chdicdir { 4 }={u,r,d,l };///方向对应于字母chpopcdir {4 }={d,l,u,r};//反向对应于字母const int状态{9 }={1,2,3,8,0,4,7,6,5}; / /目标状态const int imaLoC {9 }} { 4,0,1,2,5,8,7,6,3 };//basHUMA {int cCt{{};int a;char fx;int cIn;int PRINT;int Pin int;int HuchSU};内联int {返回AGT;0a:-a;//绝对值函数}(int {ININLINE,INT{Read 1 }洛赫{{返回} } LOC ReRANSTABS(LOC1 /3-LOC2)3)+ABS(LoC1%3-LoC2 % 3);//列和行之间的差值之和是它们的目标位置和估计值的距离} INTINT INT(INT状态{ 9 })//它们的目标位置和估计值{INTANS=0;(int i=0;ILT;9;I+)IF(状态{I})。ans+=Manh(i,._loc state{i}{state}内联bool canMove(int loc,int dir,int nxt)/确定空间在LOC位置时是否可以移动到dir,同时在LOC位置时返回到移动位置NXT{.(dir){case}。Er返回LOGTT=LOC-3;2;案例1:NXT= LOC + 1;案例1:NXT= LOC+1;案例1:NXT= LOC+1;右返回LOC% 3!= 2; case 2: NXT = LOC LOC + 3; return loclt; 6; / / / / / / / / / lower case 3: NXT = loc-1: NXT = LOC NXT = LOC loc-1; return LOC loc% 3; / / / / / / left}}}}}}}}}}}}}}}} bashumbashuma chuchuchuchuchuchuchuhua (bashuma bsm{{{{{9} ={{{2, 8, 8, 8, chushihua {9} = {3,1,8,7,6,4,0,2,5};// / / 21 steps // / / / / / / / / / / / / / / / 21 steps / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / 9} = {1, 3, 4, 7, 8, 0, 6, 5, 2}; the // can be tested for (k = 0 using the different initial states above;Klt; 9; K + + {bsm {0}} {bsm {0}}} {k}}} = bsmchushihua {k}}}; Bsm {0}}}}bsm {0}} {a = a = h (bsm {0}}}}}}} {a = ccstate}; Bsm {0}} {0}} {fx = 0; Bsm {0} {0}} {0}} {0}} {flag} = 1; Bsm {0}} {0}; BSM { 0 } { 0 } { 0 } { 0 } }}}}}}{fx=0;bsm { 0;bsm {0 }{0 }}}{旗子=1;bsm {0 };bsm {0 }{0 };bsm {+)bsm 1 {t}}。CcStA{K}= BSM{{ }}。CcSTATA{K};}//BSM1{TA}。a = h(bsm {head}.Ccstate) + head; BSM1 {ta}} {ta}}} {bsm1} {ta}}}}} {ta}}}} {bsm1} {ta}}} {ta}}}} {flag}} {ta}}} {flag} = 0; if (m = = = = = = = = = = = = = = = = = = = - 1; BSM1 {ta}} {ta}} {pre = Zuixiao {m-1}}}}} {m-pre = Zuixiao {m-1}};}else {{{{BSM1 {ta}}}}}}else {bsmsm1 {ta}}}}}}{{pre = ZuixiAO{PRE=最晓{M-1 } {头}。CSTATM;BSM1 {TA}。曾舒= BSM1 {BSM1 {TA}。预}。曾舒+ 1;/*PrtTf(
)%d,ta);(k=0;KLT;9;k++){if(k% 3==0)PrtTf())PrdTf(%d,BSM1 {Ta}.CSTATE {K});}PrTNF(,ta-1);*/ } void rudui(bashuma bsm{},bashuma bsm1{},int i) { head++; int k; for(k=0;klt;9;k++) { bsm{head}.ccstate{k}=bsm1{i}.ccstate{k}; } bsm{head}.a=bsm1{i}.a; bsm{head}.fx=bsm1{i}.fx; bsm{head}.pre=i;//*printf (% d, head); for (k = 0; K lt; 9; K + + +) {if (k% 3 = = = 0) printf (% 3 = = = 0) printf (% d% n% n% d, head); for (% d, head); for // / / / / / int min (bashuma Bsm {}}} // / / / / / / / / / / / / find the smasmallest; int; flag = = 1) continue; if (smallest gt; Bsm {i}. a)最小=1BSM {I}}。(i=1;i=1;k lt;9;k++ {if)(bSM{{}}}。{k}{k}====0)返回;I+++{I++{如果(bsm{i}}_______如果(最小=== =__Bsm{i{i{i}{k}} ===k} ===0}==0}_1}{标志_{1}1}1}继续;I+++++{如果继续;如果__最低___最低_== =_Bsm==Bsm{Bsm{Bsm{{Bsm{i}i}i}i}{i}{i}{i}.ccstate {k} = = = 0} k}= = 0) K l; for (k = 0; K lt; = ta; K + +) {l = 0; for (j = 0; J l)T; 9; j + + {{if (bsm1 {k}}}.Ccstate {j} === = Bsm {head}}.Ccstate {j}}} = Bsm {head}}} L + +;}}}}}}} {{int c, k, j, flag, n, a; / / / / / / / / / / / / / / / / / / / / (! 检查(bsm{bsm}}}{bsm{bsm}}}}}}}}}{{头部}}}{{{{{{头部_}}{{{{{bsm{bsm{bsm{bsm}}}}}}}}}}{{{{{{{{{{{{{{{{{{{其他返回{{{其他返回1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}___{{{{{{{{{{{{{{{{{}.CSTATA{NXT};BSM {头}。CcStAT{nxt}=0;RUDUI1(BSM,BSM1,CDIR {DIR});和 //恢复数组以转换BSM{Head }。CcSt{{}} BSM {头};BSM {头}{CcSt}}(=CcStAT}(=0);AD!= 0(BSM {头}}!FX!=opcdir{dir}{dir}}opcdir{dir}}canMove(现在,dir,nxt})canMove(现在,dir,dir,nxt}})canMove(现在,dir,dir,dir,nxt}}}}})canMove(现在,dir,dir,nxt,nxt,nxt,nxt,nxt,nxt{nxt,nxt{nxt{nxt{nxt{bsm{头部头部头部{头部头部头部{{头部{{{nxt}{nxt}{nxt{nxt}nxt}.nxt}.nxt}.nxt}{_sm,BSM1){rudui1(bsm,bsm,b1,b1,bsm1,CDir{dir}}};}bsm{头}}{Cuth}}{CcSt}} = BSM {Xt}= BSM{{ }}}}{头}} ZuiHui{M}= Min(BSM1);A= Zui啸{M};BSM1{A}。flag=1;m++;A*算法找到进入队列头++作为扩展节点的最小步骤,否则它不加入队列rudui(bsm,bsm1,a);if(检查(bsm{head})。CcStand)返回1;否则返回0;}无效Shuchu(BasHua BSM {},int i){INTK;如果(BSM {I})。预(=1)返回;IF(BSM {I})=1)UCU(BSM,BTF {I} }(
打印n);)(k=0;KLT;9;k++){if(k% 3==0)PrtTf())PrdTf(%d,BSM {i},CcStand {k});}步骤++;PrtTf(;int int(){int i,k,s;basHua bSm {n},bSM1{n};bSM { 0 }=CHuHIHIVE(BSM);(k=0;KLT;9;k++){if(k% 3==0)PrINTF()printf(%d,bsm{0}.ccstate{k});}bsm1{0}=chushi.(bsm1);i=pp(bsm,bsm1);if(i){s=Bsm{head}.pre;Shuchu(BSM1,s);printf(达到目标状态的总共%d步骤!,步骤+1);} PrimTF(在深度限制下没有找到解决方案)!八位数字也使用状态空间方法,其中最突出的一点是操作集是空间移动的地方。为了简化,将操作集分成四个步骤。同时,使用A*算法根据第八位数字确定展开节点。AT不在位置,请将初始状态附加到此结束:{Write a photo description here} (http://img.blog.csdn.net/20170707070707070701701161701701702546watermark/2/text/aHR0cDovL2Jsb2Jsb2cuY3Nkbi5uZXQvcXFffMzM0NDk3OTA =/font/5a6L5L2T/font size/fontsize/400/fill/I0JBQBQKFCMA = =====/dissodissodisso/70/70/gravity/south/East! {WWrite a photo description here} (http://///imp://blog.csdg.blog.blog.blog..Net/20170701161916209watermark/2/text/aHR0cDovL2Jb2Jsb2cDovL2Jsb22cuY3Nkbi5uZXQvcvvccXfffMzMzM0NDk3OTA =/font/5a6L5L2T/fontsize/400/fill/fill/I0JBQkFCMA = =====/dissolve/dissolvelve/70/gravity/SouthEast) Running results are as follows: {Write here photo description} (http://img.csdn.net/20170170170170170170170170116183131313watermark/2 watermark/text/text/text/5a6L5L5L2T/fontsize/fontsize/400/fill/fill/I5uZXQvcXFfMzM0NDk3OTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/di溶胶/70/重力东南部)12345678910110111211151515151515151515151515171922222222222222222333345454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545456666666666666670888888889;98989898989810110110110110110110101010101010101010101010101010101010101010101010101010101010101010101011011011011011011011011011011011011011011011011313131314414141515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515116161717171811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811811911911911911911911911911921921921921901901901901901901901901901901901901901901901901901901901901901901201201201201201201201201201221221222121212122222222222222222222222222222222222222222222232323232332323232323232323232323223232324242424242424242424242424242424242424242424252525252525252526262662626262626262626262626272727272282828289292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 2302

猜你喜欢

转载自www.cnblogs.com/h5qipaiyuanma/p/9780333.html