推箱子问题的设计与实现(共5页).doc
《推箱子问题的设计与实现(共5页).doc》由会员分享,可在线阅读,更多相关《推箱子问题的设计与实现(共5页).doc(5页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上推箱子问题的设计与实现实验报告班级:计本四班 学号: 姓名:刘宝同一、问题描述码头仓库是划分为 nm个格子的矩形阵列。有公共边的格子是相邻格子。当前仓库中有的格子是空闲的;有的格子则已经堆放了沉重的货物。由于堆放的货物很重,单凭仓库管理员的力量是无法移动的。仓库管理员有一项任务,要将一个小箱子推到指定的格子上去。管理员可以在仓库中移动,但不能跨过已经堆放了货物的格子。管理员站在与箱子相对的空闲格子上时,可以做一次推动,把箱子推到另一相邻的空闲格子。推箱时只能向管理员的对面方向推。由于要推动的箱子很重,仓库管理员想尽量减少推箱子的次数。二、问题求解分析对于给定的仓库布局
2、,以及仓库管理员在仓库中的位置和箱子的开始位置和目标位置,设计一个解推箱子问题的分支限界法,计算出仓库管理员将箱子从开始位置推到目标位置所需的最少推动次数。数据输入:由文件 input.txt 提供输入数据。输入文件第1行有2个正整数 n 和 m(1=n,m=100),表示仓库是 nm个格子的矩形阵列。接下来有 n 行,每行有 m个字符,表示格子的状态。S 表示格子上放了不可移动的沉重货物;w 表示格子空闲;M 表示仓库管理员的初始位置;P 表示箱子的初始位置;K 表示箱子的目标位置。结果输出:将计算出的最少推动次数输出到文件 output.txt。如果仓库管理员无法将箱子从开始位置推到目标位
3、置则输出“No solution!”。三、源程序关键代码专心-专注-专业#include #include #include int map1(int a910);char move(char t,int map910)int i,j,x,y;system(CLS); /清屏for(i=0;i9;i+) / 查找当前人位置for(j=0;j10;j+)if(mapij=4 | mapij=6)x=i,y=j;switch(t)case 8: if(mapx-1y=1)/如果人面前时路 mapx-1y=4; if(mapxy=4) mapxy=1;else mapxy=2;else if(map
4、x-1y=3)/人面前是箱子if(mapx-2y=2)/ 人前箱子 箱子前面是空位mapx-1y=4;mapx-2y=5;if(mapxy=4) mapxy=1;else mapxy=2;else if(mapx-2y=0 | mapx-2y=3 | mapx-2y=5)/人前是箱子 箱子前面是墙 箱子 已在空位上的箱子printf(a); else if(mapx-2y=1)/ 人前是箱子 箱子前面是路mapx-1y=4;mapx-2y=3;if(mapxy=4) mapxy=1; else mapxy=2; else if(mapx-1y=0) /人前是墙 printf(a); else
5、if(mapx-1y=2) mapx-1y=6; if(mapxy=4) mapxy=1; else mapxy=2; else if(mapx-1y=5)/人前是已在空位的箱子 if(mapx-2y=2)/人前是已在空位是的箱子 箱子前是一个空位 mapx-1y=6;mapx-2y=5;if(mapxy=4) mapxy=1; else mapxy=2; else if(mapx-2y=0 | mapx-2y=3 | mapx-2y=5)/人前是已在空位是的箱子 箱子前是墙 箱子 已在空位上的箱子 printf(a); else if(mapx-2y=1)/人前是已在空位上的箱子 箱子前是路
6、 mapx-1y=6;mapx-2y=3;if(mapxy=4) mapxy=1; else mapxy=2; ;break;case 6: if(mapxy+1=1)/如果人面前时路 mapxy+1=4; if(mapxy=4) mapxy=1; else mapxy=2;else if(mapxy+1=3)/人面前是箱子if(mapxy+2=2)/ 人前箱子 箱子前面是空位 mapxy+1=4;mapxy+2=5; if(mapxy=4) mapxy=1; else mapxy=2; else if(mapxy+2=0 | mapxy+2=3 | mapxy+2=5)/人前是箱子 箱子前面
7、是墙 箱子 已在空位上的箱子 printf(a); else if(mapxy+2=1)/ 人前是箱子 箱子前面是路 mapxy+1=4;mapxy+2=3; if(mapxy=4) mapxy=1; else mapxy=2; else if(mapxy+1=0) /人前是墙 printf(a); else if(mapxy+1=2) mapxy+1=6; if(mapxy=4) mapxy=1; else mapxy=2; else if(mapxy+1=5)/人前是已在空位的箱子 if(mapxy+2=2)/人前是已在空位是的箱子 箱子前是一个空位 mapxy+1=6;mapxy+2=5
8、; if(mapxy=4) mapxy=1; else mapxy=2; else if(mapxy+2=0 | mapxy+2=3 | mapxy+2=5)/人前是已在空位是的箱子 箱子前是墙 箱子 已在空位上的箱子 printf(a); else if(mapxy+2=1)/人前是已在空位上的箱子 箱子前是路 mapxy+1=6;mapxy+2=3; if(mapxy=4) mapxy=1; else mapxy=2; ;break; case 2: if(mapx+1y=1)/如果人面前时路 mapx+1y=4; if(mapxy=4) mapxy=1; else mapxy=2;els
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 箱子 问题 设计 实现
限制150内