package sort;
public class HuiSu {
public static void main(String args[]){
int data[][]={{1,1,1,1,1,1,1,1,1}, //10行9列的迷宫
{0,0,0,0,0,0,0,0,1},
{1,0,1,0,0,1,1,0,1},
{1,0,0,1,0,1,0,0,1},
{1,1,0,1,0,0,1,0,1},
{1,0,0,0,1,0,1,0,1},
{1,0,1,1,0,0,1,0,1},
{1,0,0,0,1,1,0,1,1},
{1,0,1,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1}};
int fx[][]={{0,1},{1,0},{0,-1},{-1,0}}; //代表右下左上四个方向
int x=1,y=0,p=0,i=0; //x是x轴上的坐标,y是y轴上的坐标,p是步数
int xx[]=new int[90]; //记录每一步的x坐标
int yy[]=new int[90]; //记录每一步的y坐标
int ss[]=new int[90]; //记录每一点走了几个方向,如果等于4,表示所有方向都走完
for(int j=0;j<90;j++){ //初始化三个数组
xx[j]=0;
yy[j]=0;
ss[j]=0;
}
xx[p]=x; //x=1表示入口从第二行开始
yy[p]=y;
while(x>=0 && x<=9 && y>=0 && y<=8){ //在图的范围内循环
i=i+1; //i表示四个方向,加1是下个方向
if(i<=4){ //如果四个方向还没走完,指针向右;i=2时,指针向下;i=3时,指针向左;i=4时,指针向上
x=xx[p]+fx[i-1][0]; //x方向上坐标移动
y=yy[p]+fx[i-1][1]; //y方向上坐标移动
if(x==1 && y==0){
i++;
x=xx[p]+fx[i-1][0]; //x方向上坐标移动
y=yy[p]+fx[i-1][1]; //y方向上坐标移动
}
if(x>=0 && x<=9 && y>=0 && y<=8){ //如果x和y方向上没有超出边界
if(data[x][y]==0){ //如果下一个点没有障碍点
p++; //步数增加
ss[p]=i; //记录四个方向中已经走了的方向
xx[p]=x; //记录x坐标
yy[p]=y; //记录y坐标
data[x][y]=2; //2表示该点已走过
// System.out.println("向方向"+ss[p]+"上走,坐标为("+xx[p]+","+yy[p]+"),第"+p+"步后数组结果;");
// for(int t=0;t<10;t++){
// for(int m=0;m<9;m++)
// System.out.print(data[t][m]+" ");
// System.out.println();
// }
i=0; //该点可以到达,将i置为0,重新搜索该点的4个方向
}
}
}else{ //否则,该点的四个方向已经走完,且无法继续往下走,则退回
i=ss[p]; //退回后,取出原来已走的方向
p--; //退回后,步数也要相应减1
// System.out.println("返回第"+p+"步,原方向是:"+i+",坐标是:("+xx[p]+","+yy[p]+")");
}
}
if(p<=0)
System.out.println("无法通过!"); //p=0表示又回到入口,无路径可走
else{ //否则,说明已有路径,将路径输出
System.out.print("运行路线:入口:(1,0)-->");
for(int k=1;k<=p;k++)
System.out.print("("+xx[k]+","+yy[k]+")-->");
System.out.println("出口。");
}
}
}