4399小游戏大全《SHENZHEN I/O》 的每一关最优解法有哪些

求“消灭星星”(PopStar)的游戏的最优解的算法
[问题点数:40分]
求“消灭星星”(PopStar)的游戏的最优解的算法
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2013年3月 总版技术专家分月排行榜第三
2014年5月 移动开发大版内专家分月排行榜第一2014年4月 移动开发大版内专家分月排行榜第一
匿名用户不能发表回复!|快意游戏、简单生活!
相关资源:
拿去图中绿色圈标注的粉末,细绳和空罐子&
近距离观察A处标出的枕头,拿取枕头下的镜片&&
把道具栏里的镜片放到B处的水盆里清洗&&
把粉末空罐子和细绳组合在一起做成炸药&
再把做好的炸药放在D处&&
在E处使用镜片使阳光透过镜片聚焦点燃炸药&
门被炸开后,点击门,就可以出去
打开F处的抽屉拿取里面的钥匙&&
打开G处的抽屉拿取里面的烛台&
拿取上图绿色圈标出的蜡烛和钳子&&
把烛台和蜡烛组合在一起&
再把组合好的烛台用在燃烧的蜡烛I处,组合好的蜡烛就点燃了&
把点亮的组合好的蜡烛放在J处的椅子上&&
点击椅子,椅子就会挪动到门前&&再用钳子把K处标出的钉子拿下来收进道具栏里&
在门的锁眼处使用钉子进入小游戏&
门上的窗帘上有个铁质的胸针,公主可以拿,王子也可以拿,都一样
这个迷你游戏的规则就是转动L R使圈上的图形和图形后面的孔想符合,解法如图:依次点击 R L R R&&
王子走之后,对上图L处使用钥匙&&
看到N处墙上有裂纹,暂时不管它&&
看到O处铁门断裂,暂时不管它&
拿取上图黄色圈标出的铁棒和木棍&
向左走进入P处
把铁棒在突起的石头处使用使它变成弯曲的铁棒&
拿取石头里R处的戒指&&
点击门上面红窗帘S处会掉下来一个铁质胸针&
注意:如果刚才就拿到这个道具现在拿不到也没关系,待会可以拿到&
点击U处回到电梯的房间
在V处使用红窗帘布,把窗帘布撕成条状&
再把条状的布和弯曲的铁棒组合在一起
在墙上的裂缝处使用组合好的道具&&
点击布条上爬到上面&&
把戒指给犯人进入迷你游戏
跳棋游戏,最后只能剩下一个棋子,相信大多人玩过&
规则是只能横着竖着跳,剩下的大家都明白。。。。&&
解法如图: 1 向右跳, 2 向右跳, 3 向下跳, 4 向右跳, 5 向上跳, 6 向左跳两次, 7 向右跳
完成后得到一堆木棒,然后拿取上图黄色圈标出的轮子&
把一堆木棒和轮子组合在一起&
再把铁胸针和轮子组合在一起&
注意:这里需要的铁胸针如果之前公主拿到的话就要下楼和公主对话公主会扔下来&
把组合好的轮子放在B处&
点击C处的铃&
进入D处的门
点击右侧的箱子,然后近距离观察&
拿取上图标出的6个齿轮和一条皮带
再点击上面的箱子,近距离观察&
收集上图蓝色圈标出的钉子和锤子
点击E处的绳子&&
拿取上图黄色圈标出的撬棍&
对F处的捅使用撬棍&
桶散开之后把钉子用在G处&用锤子把G处的8个钉子都钉好&&
把钉好的木排放在中间吊着的绳子处&在H处使用齿轮和皮带使机器转动 &
点击右侧墙壁的画进入小游戏&
按照上图方法点击下面的石块,就可以通过了&
拿取石块掉下来的洞里的刀&
拿取刚才掉下来的石头&
拿取黄色圈标记的剩下三个物品:鱼钩 铁棍 和须子&&
把石头 铁棍和须子组合在一起成为石锤&&
在J处使用石锤,把铁棍全敲断&&
用刀把K处的藤条砍下来&&
拿取紫色圈标出的石头&&
再拿取紫色圈标出的竹竿和木板&&
把藤条,鱼钩和竹竿组合在一起成为鱼竿&
用石头打L处的鹦鹉&&
鹦鹉飞起来后,马上用对L处的木板使用鱼竿,就可以把木板钓上来&&
把得到的两块木板放在M处,形成进入船上的路
点击两个木箱使它们移动到A处&
拿取上图黄色圈标出的开瓶器和银币&
B处有只老鼠&
用上图标记的银币按照箭头方向近距离观察床的四条腿儿,用银币拧下螺丝&
拧完螺丝床就散架了,拿取床两端的铁架,然后在道具栏的D处所示,把两个铁架和螺丝组合在一起成为梯子&&
在A处的木箱上面使用梯子&&
发现E处的门是锁着的&
近距离观察F处的箱子进入迷你游戏
游戏的规则是让所有小球的突起部位朝上&&
有个窍门是每次点击的小球都要是如上图标记的样子,点击7次这样的小球就可以开锁&&
游戏完成后箱子里出现金币,拿起来&
在梯子上面的门上使用开瓶器进入迷你游戏
跟第一章那个游戏一样的规则,只不过难度增加了一点,就不多说了&
4个按钮是用来转图案的&
解法: 依次点击上图所示的 UL, UR, UL, UR, LL, LR, LR.&
点击图中门旁边的把手进入迷你游戏&
规则是让所有把手都抬上去,绿灯全亮&
点击一个把手它旁边的把手就会向相反方向落下或者抬起来&
按照上图所示就可解开谜题
阅读G处的书,一直翻页,直到拿到纸片为止&
拿取桌子上黄色圈标注的餐具和食物&&
发现H处有一罐猪油&
仔细观察刚才迷你游戏旁边的食物电梯&
把道具栏里的餐具放在里面然后拉一下旁边的拉杆(如上图I处)&
阅读送回来的纸条&
再把食物放进去,拉一下拉杆&
拿取送回来的一盘面包屑&
在J处使用面包屑&
拿取鸟掉落的羽毛&&
在K处使用铲子拿取上面的煤灰&&
在L处的油上面使用煤灰&
煤灰放进油里面,油变成了墨水,用羽毛沾一下墨水&
再把沾了墨水的羽毛和纸组合在一起成为一封信&
再把信放在食物电梯里,拉一下拉杆&
阅读传送回来的纸条,再把道具栏的项链放进食物电梯,拉一下拉杆&
阅读传回来的纸条,拿取和纸条放在一起的装满水的瓶子&
在M处的火堆上使用装了水的瓶子&
点击熄灭的火堆去下一张图
拿取上图黄色圈标记的胶囊,花和纸&
发现N处有锁着的抽屉&
阅读O处的纸条&敲P处的门,直到警卫开门(貌似是四次)&&
跟警卫说话,他会让你出去,但是要给他东西&把道具栏里的项链给警卫 &
出去之后,跟警卫说话,直到他给你钥匙为止&
拼图游戏,没什么可说的,拼好之后得到密码纸,然后出房间来到外面
把刚才得到的密码纸给警卫,进入迷你游戏&
规则是这样的:上面是三个算数公式,减法乘法和加法,符号代表一个未知数字,符号内的数字要符
算数公式的结果,上图所示就是正确答案&&
点击问号可以选择要选的数字&
填对了的话就会画个绿色的横线
再近距离观察警卫旁边的箱子进入迷你游戏&
输入刚才得到的正确密码
盒子打开后,拿取里面的鸽子和羽毛&&
发现R处有裂缝&&
发现S处是天空&&
拿取黄色圈标出的锯条&
点击T处回到房间里
在U处使用锯条,割下两个鹿角&&
在V处墨水上使用羽毛,羽毛沾上墨水&
再把纸盒沾了墨汁的羽毛组合在一起成为信&
图中W处所示,把信和胶囊组合在一起,然后把胶囊和鸽子组合在一起&
出去来到护卫的地图,把绑着胶囊的鸽子放飞到天空(刚才的S处)
拿取W处的鸽子,读取公主的信&&
鸽子飞走后拿取W处的铁杆&
发现X处有鸽子笼&&
发现Y处墙上有洞&
进入Z处的门
和犯人对话完毕后,拿取上图黄色圈标注的奶酪 扳手 拖把,和扫帚&
发现A处有个手杖&&
发现B处的门锁着&
近距离观察C处的鸽子笼,用扳手拧开螺丝&
拿取里面的钥匙和木棒&
再把扫帚,木棍,铁棒,拖把,从下到上一次插在D处所示的小洞上&&
回到犯人的那个房间,用钥匙打开刚才锁着的通往厨房的门
进入厨房,点击E处的门回到一开始被囚禁的地方&
拿取上图左侧蓝色框标记的箱子里的金币&
用奶酪抓住F处的老鼠&&注意:老鼠会出现在酒桶下面,酒桶中间,或者左侧架子上面或者下面,对它使
用奶酪就可以抓到它&
再回到犯人的房间,把老鼠给犯人&
把机器再给犯人&&
《皇室的麻烦》相关文章
(阅读:880)
(阅读:5378)
(阅读:3670)
(阅读:669)
《守望先锋》中秩序之光和黑百合是两个深色皮肤的美女,有很多人的审美都倾向于白皮肤,可是深色皮肤在性感程度上不亚于白皮。这次的cos是由Ten和Nadenka Chris两位外国美女为大家带来的黑百合和秩序之光cos,由Pugoffka拍摄和后期。两位coser身材凹凸有致,充满了异国风情,还原度极高。
LOL地图梗是什么意思呢?LOL地图中会有多少种梗呢?这个地图梗会有什么意思呢?那么接下来就和小编一起来看看LOL地图梗详解,喜欢的小伙伴们快来看看吧,希望对大家有所帮助。
扫描二维码华容道每一关的全过程_百度知道
华容道每一关的全过程
请把每一关的华容道的全过程全写出来嘛,谢谢了~~~`
如:先将小兵往下,再~~~`````
或者谁知道什么网站有这种全过程,鄙人万分感谢~~~```
我还可以另加分~!
(那个数字是什么意思啊????)
我有更好的答案
华容道已经被研究过多年,也总结了许多关口的走法,为让各位喜欢华容道的朋友少走弯路,我把一些走法整理出来,与大家分享。下面的走法沿用L.E.Hordern的记录方法,即在多数情况下只要指明走哪一个棋子就够了,只有少数情况下才指明如何走。这时用以下符号来表示。L向左;R向右;U向上;D向下;!只走一格;#必须拐弯(指最小棋子)。没有这些符号时,表示直走,到头为止(一格或两格)。棋子编号见图1。当然,这只是指出了如何过关,大家也不必死记硬背这些步骤,关键要从此研究出过关的必要条件,而达到通关的目的。(1) 横竖皆将6 4 5 7 # 9 6 8 3 5 7 9 L 2 A 7 5 1 7 L A 2 4 5 9 L 4 5 8#3 1 9 L 4 5 8#3 1 9 L 4 5# 2A 9 # 4 1 3 6 8 5 2 A 9 7 4 3 5 8 6 D 3 A 9 1 7 4 3 1 2 2 6R 5# 8# A 9 1 7 4 3 1 A 9 1 7 2 6 8 5 A 9 3 4 2 6 5 # A(2)守口如瓶之一5 7L 2 A 1 3 6 4 1 A 2 7# 9 8 4 1 6 #4 1 6 5 #7 9 5 6 #1 4 7 # 9 5#2 A 7 #9 4 1 8 6 D 5 2 A 7 3 9 1 5 6 7 1 4 D 1 A 7 1 3 9 1 4 2 8 R 5 #6#A 7 1 3 9 1 4 A 8 3 2 8 6 5 A 7 1 9 2 8 5#A(3)守口如瓶之二7#9 8 6 #3 1 A 2 4 7 R 2 A 1 3 6 #8 9 7#4 A 5 6 #8 9 7 # 8 9 3 6# 51 6 U 5 1 A 4 81 2U 8 1 1 7 9 3 5 2#8 7 # 4 A 2#8 5 3 9 1 7 4 A 2 6 8 3 7 1 9 5 D 3 9 2 1 6 8 3 5 4 9 R 1# 7# A 2 1 6 8 3 5 A 2 1 6 4 A 7 1 A 2 3 8 4 9 1#A(4)层层设防之二9 L8#4 2 A 1 3 5 2 4 8 9 6 7 2 5 3 1 L,A 4 5 2 7 6 9 8 2 7 6 # 7 8# 7 9 3 6 # 5 8 #4 A 6# 5 3 8 9 2 4 A 6 1 5 8# A 6 1 1 5 8 3 4 7 2U 9 7 2 A 6 1# 4 A 6 3 2 6# 7 9 A 1#3 2 8 5 3 1 A 9 7 1# A 4 3 2 # A 1 6# 8 A 1 4 3 1# 4 3 9 7 8 6 D A 6 2 1 4 3 9 7 6 8 A 9 7 8 #A(5)Top secret7 5 3 2 1 4 6 7 L A 1#4 6 7 1 1 3 5 9 8 A 1 4 2 5 3# 4 7 R 6 2 4 1 A 8 9 3 D 5 1 4 2 7 U 6 U A 1 3 9 8 3 D 1 D A 7D 6D 2 5 4 9 8 3 1 A 9 8 1#A(6)三军联防6 7 4 3 7# 3 4 2 1 A 7 5 8 4 6 9# 6 4 8 3 9 L 2 1 A 5# 3 8 9 U 4 6 2 1 A5 73 9# A 1 2 4 6 8 9 A 1 2 4 6 9# A 3 7 5 1 2 4 6 9 8 A 4 6 8#A(7)堵塞要道5 9 6 7 4#2 A 3 #7 5 6 9 8 4 2 D A 3 1 7 5 6 9 8 4 2 D A 1 3 D 7 5 6 9 8 4 2 A 9 8 2#A(8)水泄不通9 7 6 8 9 U 7 6 5 4 8 9 U 5 4 9 A 1 3# 8 A 1 2 9 1# 4 5 A 3# 21# 4 5 6 7 A 5 4 1# 2 3 #5 4 2 1 9 D 3 8 5 4 A 7 6 1# 9 3 8#5 4 A 1 9 6 7 1 9 D A 4 5 2 8 3 U 6 7 9 1 A 6 7 1#A(9)四路进兵(原文 67步,11 66步)A 4 3 #2 A 4 3 #1 5 2 #7 6 A 3 #1 2 #7 6 9 8 A 6 7 2 0#1 3 #6 7 1 2 5 D 3 4 6 7 A 8 9 2# 5 3 4# 6 7 A 2 5 9 8 2 5 D A 7 6 1 4 3 U 9 8 5 2 A 9 8 2# A华容道问题用计算机求解,一般采用广度搜索的方法,其原理很简单,就是把下一步可能有的走法全部算出来,比如第一步有五种走法,将这五种走法的下一步走法分别算出来,可能会有三十步,在继续将这三十步走法的下一步走法分别算出来,可能会更多,以此类推,直到达到目标状态(曹操在出口位置)为止。在解华容道的问题上,我觉得有两个问题比较棘手。其一、算法的效率。其二、获得最优解法。我是这样解决的:1、 要提高算法的效率,首先要知道算法的瓶颈在什么地方,在得出每一个状态(走完一步各个棋子的位置)都要和前面的状态进行比较,以保证不重复,随着步数的增多,状态数会大幅度增加,这是,和前面的状态比较这一过程成了整个算法的效率。解决的办法,从两个地方着手,其一,增加每一步比较的速度。在程序中,用5*4的数组表示一个状态,这样,每一次比较要比较二十个数,因为数组中每个数定义从0-7,用三个二进制位可以表示,3*20=60位,用一个64位数就可以表示(有的资料说用四个字节就可以,我实在想不出来),这样每次比较一个64位数就可以了。其二、减少比较的状态,这是提高效率的关键。比较的时候不要和前面所有的状态都进行比较,只要和前两步的所有状态进行比较就可以了。经过以上的优化,在解横刀立马时,大约需要一,两秒钟就可以了,(我的机器,赛扬1.1OC1.46)。2、 获得最优解法,比如横刀立马是81步,这里的一步指移动一个棋子,可以把一个卒子向一个方向移动两格,或者卒子拐弯移动两格,或者一个将向一个方向移动两格(横将横着移,竖将竖着移)都是一步。获得最优解法的关键是把下一步可能有的走法全部算出来,不能遗漏。我是根据空格来算走法的的,分三种情况:① 、卒子拐弯移动,如果有连着两个空格(横向的),则如果在它的上面或下面(有四个位置)有卒子的话,那么可以拐弯移动,有四种走法。如果两个空格是竖向的,那么,空格的左右如果有卒子,也可以拐弯移动,也有四种走法。②、向一个方向移动两格,这里可能出现的情况有:卒子向一个方向移动两格,横将横着移两格,竖将竖着移两格③、考虑向一个方向移动一格的情况,这里情况很多,我不一一列举了。以上的算法很麻烦,很大一部分程序用来写这个了,如果大家有更简单的,可以告诉我,但一个原则,必须把所有的走法全部考虑。另外,说一下我在写程序时的小插曲。程序快写好时,运行时发现,每解一次,内存使用会增加7,8兆,后来发现分配的内存每释放导致的,其实在函数中也就分配了几十个字节,由于被重复调用,最后泄漏的内存就很可观了,以后使用指针分配内存可要注意了,(C用malloc,C++用new),一定要释放,弄不好,^@^。程序用dev-C++ 4.9.9.0(可以从网上下,只有十多兆)编译通过,因为dev C++没有框架等东西,所以界面直接用window API写的。生成的可执行文件很小,68 K。另外,在程序中可以自定义布局,用5*4数表示。其中0-空格,1-卒子,2到6 将,7曹操。最后附上所有的源代码。main.cpp程序为:#include &string&#include &windows.h&#include &HRD_Calculate.h&char str[80];PAINTSTRUCTHDC hdc,RECTHBITMAPHBRUSHHPENPOINThrd_ // User declarationsint current_unsigned __int8 display_node[5][4];/* Declare Windows procedure */LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);/* Make the class name into a global variable */char szClassName[ ] = &WindowsApp&;int WINAPI WinMain (HINSTANCE hThisInstance,HINSTANCE hPrevInstance,LPSTR lpszArgument,int nFunsterStil){HWND /* This is the handle for our window */MSG /* Here messages to the application are saved */WNDCLASSEX /* Data structure for the windowclass *//* The Window structure */wincl.hInstance = hThisIwincl.lpszClassName = szClassNwincl.lpfnWndProc = WindowP /* This function is called by windows */wincl.style = CS_DBLCLKS; /* Catch double-clicks */wincl.cbSize = sizeof (WNDCLASSEX);/* Use default icon and mouse-pointer */wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);wincl.hIconSm = LoadIcon (NULL, IDI_WINLOGO);wincl.hCursor = LoadCursor (NULL, IDC_ARROW);wincl.lpszMenuName = NULL; /* No menu */wincl.cbClsExtra = 0; /* No extra bytes after the window class */wincl.cbWndExtra = 0; /* structure or the window instance *//* Use Windows's default color as the background of the window */wincl.hbrBackground = (HBRUSH) COLOR_BTNFACE;/* Register the window class, and if it fails quit the program */if (!RegisterClassEx (&wincl))return 0;/* The class is registered, let's create the program*/hwnd = CreateWindowEx (0, /* Extended possibilites for variation */szClassName, /* Classname */&华容道&, /* Title Text */WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU, /* default window */CW_USEDEFAULT, /* Windows decides the position */CW_USEDEFAULT, /* where the window ends up on the screen */544, /* The programs width */375, /* and height in pixels */HWND_DESKTOP, /* The window is a child-window to desktop */NULL, /* No menu */hThisInstance, /* Program Instance handler */NULL /* No Window Creation data */);/* Make the window visible on the screen */ShowWindow (hwnd, nFunsterStil);/* Run the message loop. It will run until GetMessage() returns 0 */while (GetMessage (&messages, NULL, 0, 0)){/* Translate virtual-key messages into character messages */TranslateMessage(&messages);/* Send message to WindowProcedure */DispatchMessage(&messages);}/* The program return-value is 0 - The value that PostQuitMessage() gave */return messages.wP}/* This function is called by the Windows function DispatchMessage() */LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){int initx=20,inity=20,grid=50,interspace=3,arc=25;int i,j,m=0;char s[100];switch (message) /* handle the messages */{case WM_CREATE:{CreateWindow(&BUTTON&,&解题&,WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,350,150,100,30,hwnd,(HMENU)1000,((LPCREATESTRUCT) lParam)-&hInstance,NULL);CreateWindow(&BUTTON&,&自定义布局&,WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,350,90,100,30,hwnd,(HMENU)1001,((LPCREATESTRUCT) lParam)-&hInstance,NULL);CreateWindow(&EDIT&,&&,WS_CHILD|WS_VISIBLE|ES_NUMBER|WS_BORDER,350,50,165,20,hwnd,(HMENU)1002,((LPCREATESTRUCT) lParam)-&hInstance,NULL);GetClientRect(hwnd,&rect);hdc=GetDC(hwnd);memdc=CreateCompatibleDC(hdc);hbit=CreateCompatibleBitmap(hdc,rect.right,rect.bottom);SelectObject(memdc,hbit);hbrush = (HBRUSH) GetStockObject(WHITE_BRUSH);SelectObject(memdc, hbrush);//hpen = (HPEN) GetStockObject(BLACK_PEN);//SelectObject(memdc, hpen);ReleaseDC(hwnd,hdc);///////////////////////////////////////display_node[0][0]=GENERAL1;display_node[0][1]=CAOCAO;display_node[0][2]=CAOCAO;display_node[0][3]=GENERAL2;display_node[1][0]=GENERAL1;display_node[1][1]=CAOCAO;display_node[1][2]=CAOCAO;display_node[1][3]=GENERAL2;display_node[2][0]=GENERAL3;display_node[2][1]=GENERAL5;display_node[2][2]=GENERAL5;display_node[2][3]=GENERAL4;display_node[3][0]=GENERAL3;display_node[3][1]=SOLDIER;display_node[3][2]=SOLDIER;display_node[3][3]=GENERAL4;display_node[4][0]=SOLDIER;display_node[4][1]=BLANK;display_node[4][2]=BLANK;display_node[4][3]=SOLDIER;}case WM_TIMER:{if(current_step&hrd.depth)current_step++;else{current_step=0;KillTimer(hwnd,1);Sleep(2000);}for( i=0;i&5;i++)for( j=0;j&4;j++)display_node[i][j]=hrd.out[current_step].state[i][j];InvalidateRect(hwnd, NULL, 0);}case WM_COMMAND:if(HIWORD(wParam)==BN_CLICKED)switch (LOWORD(wParam)){case 1000:{//hrd= new hrd_Chrd.InitState(display_node);if( hrd.SearchNode()){sprintf(s, &解题成功!\n\n解题深度:%d 节点数:%d&, hrd.depth,hrd.totalnodes);MessageBox(hwnd,s,&华容道&,MB_OK);hrd.OutputStep();current_step=0;SetTimer(hwnd, 1,700, NULL);}else{sprintf(s,&此局无解&) ;MessageBox(hwnd,s,&华容道&,MB_OK);}}case 1001:{GetDlgItemText(hwnd,1002,str,80);for (i=0;i&5;i++)for(j=0;j&4;j++){display_node[i][j]=(int)(str[m])-0x30;m++;}InvalidateRect(hwnd, NULL, 1);}}case WM_PAINT:{hdc = BeginPaint(hwnd,&pa);PatBlt(memdc, 0, 0, rect.right, rect.bottom, PATCOPY);//Drawfor (i=0;i&5;i++)for(j=0;j&4;j++){if (display_node[i][j]==SOLDIER)RoundRect(memdc,inity+j*grid+j*interspace,initx+i*grid+i*interspace,inity+(j+1)*grid+j*interspace,initx+(i+1)*grid+i*interspace,arc,arc);if (display_node[i][j]&=GENERAL1 && display_node[i][j]&=GENERAL5){if (i&4)if (display_node[i][j]==display_node[i+1][j])RoundRect(memdc,inity+j*grid+j*interspace,initx+i*grid+i*interspace,inity+(j+1)*grid+j*interspace,initx+(i+2)*grid+(i+1)*interspace,arc,arc);if (j&3)if (display_node[i][j]==display_node[i][j+1])RoundRect(memdc,inity+j*grid+j*interspace,initx+i*grid+i*interspace,inity+(j+2)*grid+(j+1)*interspace,initx+(i+1)*grid+i*interspace,arc,arc);}if (display_node[i][j]==CAOCAO)if (i&4 && j&3)if( display_node[i+1][j+1]==CAOCAO)RoundRect(memdc,inity+j*grid+j*interspace,initx+i*grid+i*interspace,inity+(j+2)*grid+(j+1)*interspace,initx+(i+2)*grid+(i+1)*interspace,arc,arc);}//////////////////////////////////BitBlt(hdc,0,0,rect.right,rect.bottom,memdc,0,0,SRCCOPY);EndPaint(hwnd,&pa);}case WM_DESTROY:{PostQuitMessage (0); /* send a WM_QUIT to the message queue */DeleteDC(memdc);DeleteObject(hbit);}default: /* for messages that we don't deal with */return DefWindowProc (hwnd, message, wParam, lParam);}return 0;}///HRD_Calculate.h 的程序写法///////////////////////////////////////////////////华容道解法1.0.0.1//此解法可得出最优解//横刀立马 81步//最后修改时间
晚上///////////////////////////////////////////////////#include &HRD_Calculate.h&hrd_calculate::hrd_calculate(){//申请状态表空间first= new s_node[MAX_NODES];}hrd_calculate::~hrd_calculate(){delete[]}void hrd_calculate::NodeToSNode(node * pnode,s_node* psnode){int i,j;__int8 hgeneral=8,vgeneral=9;node * tnode=*tnode=*for( i=0;i&5;i++)for( j=0;j&4;j++){if (tnode-&state[i][j]&=GENERAL1 && tnode-&state[i][j]&=GENERAL5){if (j&3)if (tnode-&state[i][j] == tnode-&state[i][j+1]){tnode-&state[i][j]=tnode-&state[i][j+1]=}if(i&4)if(tnode-&state[i][j] == tnode-&state[i+1][j]){tnode-&state[i][j]=tnode-&state[i+1][j]=}}}for( i=0;i&5;i++)for( j=0;j&4;j++){if(tnode-&state[i][j]==hgeneral) tnode-&state[i][j]=HGENERAL;if(tnode-&state[i][j]==vgeneral) tnode-&state[i][j]=VGENERAL;}psnode-&prior=(s_node *)pnode-&psnode-&state=0;psnode-&ext_state=0;for( i=0;i&5;i++)for( j=0;j&4;j++){psnode-&state += pnode-&state[i][j];psnode-&ext_state += tnode-&state[i][j];if (!(i==4 && j==3)) psnode-&state = psnode-&state&&3;if (!(i==4 && j==3)) psnode-&ext_state = psnode-&ext_state&&3;}}void hrd_calculate::SNodeToNode(s_node* psnode,node * pnode){__int64 temp,s;s = psnode-&pnode-&prior=(node*)psnode-&for(int i=4;i&=0;i--)for(int j=3;j&=0;j--){temp = s & 0x0007;pnode-&state[i][j]=s = s &&3 ;}}void hrd_calculate::OutputStep(){node * outfirst,* outlast,*p;outfirst=&out[0];outlast=outfirst+(depth);p=while ( p&=outfirst){SNodeToNode(last,p);last=last-&p--;};}bool hrd_calculate::SearchNode(){node * tnode=while(true){nextnodes=0;table[depth+1]=(unsigned int)(last+1);for ( ;search&=current_ search++){SNodeToNode(search,tnode);tnode-&prior=(node *)total=SearchOneNode(tnode);nextnodes +=if (total==SUCCESS){}}if (nextnodes==0){}depth++;current_last=}}int hrd_calculate::AddNode(node c){s_node *p;s_node *snode=new s_if (depth&=3) p=else p=(s_node*)table[depth-1];NodeToSNode(&c,snode);for (;p&=p++)if (p-&ext_state== snode-&ext_state){return ADD_NO_NODE;}//加入节点last++;last-&prior=snode-&last-&state=snode-&last-&ext_state=snode-&ext_totalnodes++;if (c.state[3][1]==CAOCAO && c.state[4][2]==CAOCAO )return SUCCESS;elsereturn ADD_ONE_NODE;}void hrd_calculate::InitState(unsigned __int8 state[5][4]){//设定初始状态initnode.prior=0; //没有上一步for(int i=0;i&5;i++)for(int j=0;j&4;j++)initnode.state[i][j]=state[i][j];////////////////////NodeToSNode(&initnode,first);////////////last=search=current_last=depth=1;totalnodes=1;table[0]=0;table[depth]=(unsigned int)}int hrd_calculate::SearchOneNode(node *c){int i,j;int next_nodes=0;for(i=0;i&5;i++)for(j=0;j&4;j++){if (c-&state[i][j]==BLANK){/////////////////////////////////////////////////////////////////////////////////直走两步if (j&3){if (c-&state[i][j+1]==BLANK){if (j&0)//左边兵右移两格{if (c-&state[i][j-1] == SOLDIER){t=*c; t.prior=c-&t.state[i][j-1]=BLANK;t.state[i][j+1]=SOLDIER;switch (AddNode(t)){case SUCCESS: return SUCCESS;case ADD_ONE_NODE: next_nodes++;}}}if (j&2)//右边兵左移两格{if (c-&state[i][j+2]==SOLDIER){t=*c; t.prior=c-&t.state[i][j+2]=BLANK;t.state[i][j]=SOLDIER;switch (AddNode(t)){case SUCCESS: return SUCCESS;case ADD_ONE_NODE: next_nodes++;}}}if (j==2)//左边将右移两格{if (c-&state[i][j-1]&=GENERAL1 && c-&state[i][j-1]&=GENERAL5 && c-&state[i][j-1]==c-&state[i][j-2]){t=*c; t.prior=c-&t.state[i][j]=c-&state[i][j-1];t.state[i][j+1]=c-&state[i][j-1];t.state[i][j-1]=BLANK;t.state[i][j-2]=BLANK;switch (AddNode(t)){case SUCCESS: return SUCCESS;case ADD_ONE_NODE: next_nodes++;}}}if (j==0)//右边将左移两格{if (c-&state[i][j+2]&=GENERAL1 && c-&state[i][j+2]&=GENERAL5 && c-&state[i][j+2]==c-&state[i][j+3]){t=*c; t.prior=c-&t.state[i][j]=c-&state[i][j+2];t.state[i][j+1]=c-&state[i][j+2];t.state[i][j+2]=BLANK;t.state[i][j+3]=BLANK;switch (AddNode(t)){case SUCCESS: return SUCCESS;case ADD_ONE_NODE: n
采纳率:5%
为您推荐:
其他类似问题
华容道的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 腾讯游戏 的文章

 

随机推荐