dfs走迷宫

来源:互联网 发布:淘宝创建店铺流程 编辑:程序博客网 时间:2024/05/22 03:04
import java.util.*;public class Main {    static Scanner in = new Scanner(System.in);    static int[][] bool= new int[50][50];    static int[][] maze= new int[50][50];    static int min=Integer.MAX_VALUE;    static int p,q,n,m;    //方向    static int[][] dir= {            {0,1},//右            {1,0},//下            {0,-1},//左            {-1,0}//上        };    static void dfs(int x,int y,int step){         if(x==p&&y==q){             if(step<min)                min=step; //更新最小路径                        return;             }         int tx=0,ty=0;         //每个方向都尝试一下         for (int i = 0; i < 4; i++) {            tx=x+dir[i][0];            ty=y+dir[i][1];             //    判断坐标是否出界            if(tx>n||ty>m||tx<1||ty<1)                 continue;            //如果没在已经走过的路径上并且是不是障碍物            if(bool[tx][ty]==0&&maze[tx][ty]==0){                bool[tx][ty]=1;                dfs(tx,ty,step+1);                bool[tx][ty]=0;            }          }         return;    }    public static void main(String[] args) {          n=in.nextInt();          m=in.nextInt();          //创建迷宫        for (int i = 1; i <=n; i++) {          for (int j = 1; j <=m; j++) {              maze[i][j]=in.nextInt();              bool[i][j]=0;           }        }        //输入起点终点        int start=in.nextInt();        int end =in.nextInt();         p=in.nextInt();         q=in.nextInt();         bool[start][end]=1;           dfs(start,end,0);                System.out.println(min);   }}

原创粉丝点击