迷宫问题

问题描述:
无,详见其他人的文章

代码:

package test;

public class Maze {
static int count=0;
    public static void main(String[] args) {
               int maze[][]={
                       {1,1,1,1,1,1},
                       {1,0,0,0,1,1},
                       {1,0,1,0,0,1},
                       {1,0,0,0,1,1},
                       {1,1,0,0,0,1},
                       {1,1,1,1,1,1}
               };


               Path path=new Path();

               path.length=0;//迷宫长度初始化

               backTrackMaze(maze,1,1,path);//从1,1到4,4

    }

    private static void backTrackMaze(int[][] maze, int xi, int yi, Path path) {
    int di=0,i=0,j=0;
    if(xi==4&&yi==4){//找到一条路
        path.point[path.length].i=xi;
        path.point[path.length].j=yi;
        path.length++;
        displayPath(path);
    }
    else {
          if(maze[xi][yi]==0)
          {

              while(di<4){//
                  path.point[path.length].i=xi;
                  path.point[path.length].j=yi;
                  path.length++;
                  switch (di) {//上下左右
                case 0:i=xi-1;j=yi;break;
                case 1:i=xi;j=yi+1;break;
                case 2:i=xi+1;j=yi;break;
                case 3:i=xi;j=yi-1;break;
//                case 0:xi=xi-1;yi=yi;break;
//                  case 1:xi=xi;yi=yi+1;break;
//                  case 2:xi=xi+1;yi=yi;break;
//                  case 3:xi=xi;yi=yi-1;break;
                  }

                  maze[xi][yi]=-1;//避免重复找路径

                  backTrackMaze(maze,i,j,path);

                  maze[xi][yi]=0;//恢复可走路径
                  path.length--;//回退一个方格
                  di++;

              }
          }
    }

    }

    private static void displayPath(Path path) {
        ++count;
        System.out.println("第"+count+"条迷宫路径:");
        for(int k=0;k<path.length;k++)
        {
            System.out.print("("+path.point[k].i+","+path.point[k].j+")"+" ");
        }
        System.out.println();

    }
}
class Point{
    int i,j;
    public Point(){

    }
}

class Path{
    Point point[];
    int length;
    public Path(){
        point=new Point[20];
        for(int i=0;i<20;i++)//对象数组初始化,否则空指针
        {
            point[i]=new Point();
        }
    }
}

输出:

第1条迷宫路径:
(1,1) (1,2) (1,3) (2,3) (3,3) (4,3) (4,4)
第2条迷宫路径:
(1,1) (1,2) (1,3) (2,3) (3,3) (3,3) (3,2) (4,2) (4,3) (4,4)
第3条迷宫路径:
(1,1) (1,2) (1,1) (2,1) (3,1) (3,2) (3,3) (4,3) (4,4)
第4条迷宫路径:
(1,1) (1,2) (1,1) (2,1) (3,1) (3,2) (3,2) (4,2) (4,3) (4,4)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值