黄色区域是存储商品的储位,每个储位都有自己的编号,如A1,A2,B2,….。每个储位中存放着不同的商品。
蓝色区域P1/P2/P3 是仓库工作人员工作站。
白色区域是空白区域。
仓库工作人员只可以自由行走在白色区域与蓝色区域之间,但是仓库工作人员不能跨越任何黄色区域。
仓库工作人员从储位中捡出商品时,只能站立在储位旁边的空白位置。例如工作人员站在图中的X位置可以捡取存放在C6与B6的商品。注意:工作人员不能在储位的上下方捡取任何商品,例如图中的Y或Z。现在仓库工作人员有5个不同的商品需要捡出。仓库工作人员可能会从P1/P2/P3任何一个工作站出发,捡出商品后再返回起始工作站。请你设计一个程序帮助仓库工作人员计算出最短的捡料顺序与路径。
1. 程序需提供参数允许用户选择起始工作站点。2. 程序需使用简单易懂的方式告诉用户具体的检料路经与顺序(图形界面最好)。3. 请提交原代码的同时提交如下文档 核心算法流程图
软件说明文档:需说明软件开发语言与平台、软件运行环境、使用方法
软件体系结构说明4. 软件需要考虑可扩展性。例如当面对更大的仓库的时候,软件是否仍可以使用?
(1)当前的横坐标+1或-1是否等于目标坐标的横坐标,且纵坐标相等。
(2)当前坐标的值是否为空
(3)坐标边界条件:10>=x>=0,12>=y>=0
应该是像走迷宫那样,记录每一条可到达的路径。可以定义一个容器Map来保存路径编号及所有路径Map<Integer,List>
然后计算出list的大小来判断最短路径至于怎么循环就没什么思路了!
大家一起来想想啊!
图的地址是:http://blog.m6699.com/album/20090325/2009032513483625500.jpg
我这里能看到啊
class c{
public static void main(String[] args){
int count1=0;
int count=0;
ArrayList al=new ArrayList();
int[] p={1,0};//工作站
int[] c1={1,1};//五个商品
int[] c2={1,2};
int[] c3={1,3};
int[] c4={3,2};
int[] c5={6,3};
al.add(p);
al.add(c1);
al.add(c2);
al.add(c3);
al.add(c4);
al.add(c5);
for(int a=1;a<=5;a++){
for(int b=1;b<=5;b++){
if(b==a) continue;
for(int c=1;c<=5;c++){
if(c==a||c==b) continue;
for(int d=1;d<=5;d++){
if(d==c||d==b||d==a)continue;
for(int e=1;e<=5;e++){
if(e==d||e==c||e==b||e==a) continue;
c1=(int[])al.get(a);
c2=(int[])al.get(b);
c3=(int[])al.get(c);
c4=(int[])al.get(d);
c5=(int[])al.get(e);
count1=count;
count=Math.abs(c1[0]-p[0])+Math.abs(c1[1]-p[1])+Math.abs(c2[0]-c1[0])+Math.abs(c2[1]-c1[1])+Math.abs(c3[0]-c2[0])+Math.abs(c3[1]-c2[1])+Math.abs(c3[0]-c4[0])+Math.abs(c4[1]-c3[1])+Math.abs(c4[0]-c5[0])+Math.abs(c4[1]-c5[1])+Math.abs(c5[0]-p[0])+Math.abs(c5[1]-p[1]);
if(count>count1&&count1!=0) count=count1;
}
}
}
}
}
System.out.println(count);
}
}是我的方法太笨了。。