返回信息流package maze;
//利用栈 解决迷宫问题
public class MyMaze {
public static int mg[][]={{1,1,1,1,1,1},//地图迷宫,其四周是为1的外框
{1,0,0,0,1,1},
{1,0,1,0,0,1},
{1,0,1,0,1,1},
{1,1,0,0,0,1},
{1,1,1,1,1,1}};
public static Point[] stack=new Point[50];//栈
for(int i=0; i<50; i++){// ????????????????????????????
Point p=new Point();
stack[i]=p;
}
public static int top=-1;//栈顶指针
// public static int path[];//保存最短路径的数组
// public static int minLen;//最短路径长度。
public MyMaze(){
}
public static int mgPath(int xi,int yi,int xe,int ye){//探索路径为:(xi,yi)->(xe,ye)
int i=0,j=0,di=-1,find=0;
top++;
stack[top].i=xi;
stack[top].j=yi;
stack[top].di=-1;//初始结点进栈
mg[1][1]=-1;
while(top>-1){//栈不为空时循环
i=stack[top].i;j=stack[top].j;di=stack[top].di;//取栈顶方块
if(i==xe&&j==ye){//找到了出口,输出路径
System.out.println("迷宫路径如下:");
for(int k=0;k<=top;k++){
System.out.println("("+stack[k].i+","+stack[k].j+")");
if((k+1)%5==0)//每输出五个方块后换一行
System.out.println();
}
return 1;
}
find=0;
while(di<4&&find==0){//找(i,j)方块下一个可走方块
di++;
switch(di){//方向规定按顺时针方向来探索
case 0: i=stack[top].i-1;j=stack[top].j;break;
case 1: i=stack[top].i;j=stack[top].j+1;break;
case 2: i=stack[top].i+1;j=stack[top].j;break;
case 3: i=stack[top].i;j=stack[top].j-1;break;
}
if(mg[i][j]==0)
find=1;//找到下一个可走相邻方块
}
if(find==1){//找到了一个可走的相邻方块
stack[top].di=di;//修改原栈顶元素的di值
top++;
stack[top].i=i;stack[top].j=j;stack[top].di=-1;
mg[i][j]=-1;//避免重复走到该方块,将其置为-1
}else{//没有相邻方块可走,则退栈。
mg[stack[top].i][stack[top].j]=0;//让该位置变为其他路径可走方块。
top--;//将该方块退栈
}
}
return 0;
}
public static void main(String[] args) {
MyMaze.mgPath(1, 1, 4, 4);
}
}
出现问题的地方我已经用???标注了。先谢谢各位。
这是一条镜像帖。来源:北邮人论坛 / java / #17835同步于 2011/4/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
求解。一个空指针问题,处理后出现的问题。
wnfd369
2011/4/4镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。