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("出口。"); } } }
原文:http://www.cnblogs.com/lvbubu/p/4697078.html