推箱子问题的设计与实现

推箱子问题的设计与实现

ID:3198088

大小:43.00 KB

页数:5页

时间:2017-11-20

推箱子问题的设计与实现_第1页
推箱子问题的设计与实现_第2页
推箱子问题的设计与实现_第3页
推箱子问题的设计与实现_第4页
推箱子问题的设计与实现_第5页
资源描述:

《推箱子问题的设计与实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、《推箱子问题的设计与实现》实验报告班级:计本四班学号:2012020386姓名:刘宝同一、问题描述码头仓库是划分为n×m个格子的矩形阵列。有公共边的格子是相邻格子。当前仓库中有的格子是空闲的;有的格子则已经堆放了沉重的货物。由于堆放的货物很重,单凭仓库管理员的力量是无法移动的。仓库管理员有一项任务,要将一个小箱子推到指定的格子上去。管理员可以在仓库中移动,但不能跨过已经堆放了货物的格子。管理员站在与箱子相对的空闲格子上时,可以做一次推动,把箱子推到另一相邻的空闲格子。推箱时只能向管理员的对面方向推。由于要推动的箱子很重,仓库管理员想

2、尽量减少推箱子的次数。二、问题求解分析对于给定的仓库布局,以及仓库管理员在仓库中的位置和箱子的开始位置和目标位置,设计一个解推箱子问题的分支限界法,计算出仓库管理员将箱子从开始位置推到目标位置所需的最少推动次数。数据输入:由文件input.txt提供输入数据。输入文件第1行有2个正整数n和m(1<=n,m<=100),表示仓库是n×m个格子的矩形阵列。接下来有n行,每行有m个字符,表示格子的状态。S表示格子上放了不可移动的沉重货物;w表示格子空闲;M表示仓库管理员的初始位置;P表示箱子的初始位置;K表示箱子的目标位置。结果输出:将计

3、算出的最少推动次数输出到文件output.txt。如果仓库管理员无法将箱子从开始位置推到目标位置则输出“Nosolution!”。三、源程序关键代码#include#include#includeintmap1(inta[9][10]);charmove(chart,intmap[9][10]){inti,j,x,y;system("CLS");//清屏for(i=0;i<9;i++)//查找当前人位置{for(j=0;j<10;j++)if(map[i][j]==4

4、

5、map

6、[i][j]==6){x=i,y=j;};}switch(t){case'8':{if(map[x-1][y]==1)//如果人面前时路{map[x-1][y]=4;if(map[x][y]==4)map[x][y]=1;elsemap[x][y]=2;}elseif(map[x-1][y]==3)//人面前是箱子{if(map[x-2][y]==2)//人前箱子箱子前面是空位{map[x-1][y]=4;map[x-2][y]=5;if(map[x][y]==4)map[x][y]=1;elsemap[x][y]=2;}elsei

7、f(map[x-2][y]==0

8、

9、map[x-2][y]==3

10、

11、map[x-2][y]==5)//人前是箱子箱子前面是墙箱子已在空位上的箱子{printf("a");}elseif(map[x-2][y]==1)//人前是箱子箱子前面是路{map[x-1][y]=4;map[x-2][y]=3;if(map[x][y]==4)map[x][y]=1;elsemap[x][y]=2;};}elseif(map[x-1][y]==0)//人前是墙{printf("a");}elseif(map[x-1][y]==2){map[x

12、-1][y]=6;if(map[x][y]==4)map[x][y]=1;elsemap[x][y]=2;}elseif(map[x-1][y]==5)//人前是已在空位的箱子{if(map[x-2][y]==2)//人前是已在空位是的箱子箱子前是一个空位{map[x-1][y]=6;map[x-2][y]=5;if(map[x][y]==4)map[x][y]=1;elsemap[x][y]=2;}elseif(map[x-2][y]==0

13、

14、map[x-2][y]==3

15、

16、map[x-2][y]==5)//人前是已在空位是的箱子

17、箱子前是墙箱子已在空位上的箱子{printf("a");}elseif(map[x-2][y]==1)//人前是已在空位上的箱子箱子前是路{map[x-1][y]=6;map[x-2][y]=3;if(map[x][y]==4)map[x][y]=1;elsemap[x][y]=2;};};};break;case'6':{if(map[x][y+1]==1)//如果人面前时路{map[x][y+1]=4;if(map[x][y]==4)map[x][y]=1;elsemap[x][y]=2;}elseif(map[x][y+1]

18、==3)//人面前是箱子{if(map[x][y+2]==2)//人前箱子箱子前面是空位{map[x][y+1]=4;map[x][y+2]=5;if(map[x][y]==4)map[x][y]=1;elsemap[x][y]=2;

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。