深度优先搜索
【题目】类似一张宫格图,即迷宫,小明在迷宫中迷路了,好朋友苏格去寻找他,请你找出一条最短路径的步数。其中有障碍物,不能走。
输入要求:第一行输入两个整数n,m分别代表迷宫为n行m列,接下来n行分别输入m个数值,最后一行输入起点起点坐标(小华的坐标)和终点坐标(小明的坐标),输入0代表可以走,输入1代表障碍物;
输出要求:只输出最短步数
输入样例:
5 4
0 0 1 0
0 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1
1 1 4 3
输出样例:
7
代码如下:
import java.util.Scanner; public class J解救小哈深搜代码 { static int n,m,sx,sy,zx,zy; static final int size=55; static int min=99999999; static int dir[][]= {{0,1},{1,0},{0,-1},{-1,0}}; static int map[][]=new int [size][size];//存放 static int vis[][]=new int [size][size];//标记是否走过 static Scanner in=new Scanner (System.in); public static boolean inmap(int x,int y) {//判断是否越界 return(x>=1&&x<=n&&y>=1&&y<=m); } public static void dfs(int x,int y,int ans) { if(x==zx&&y==zy) { if(ans<min) { min=ans;//变更最小步数 } return; } for(int i=0;i<4;i++) {//判断下一个点 int nx=x+dir[i][0]; int ny=y+dir[i][1]; if(inmap(nx,ny)&&vis[nx][ny]==0&&map[nx][ny]==0) { vis[nx][ny]=1; dfs(nx,ny,ans+1); vis[nx][ny]=0; } } return ; } public static void main(String[] args) { // TODO Auto-generated method stub n=in.nextInt();m=in.nextInt(); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { map[i][j]=in.nextInt();//1代表障碍物,0代表空地可走 } } sx=in.nextInt();sy=in.nextInt();//起点 zx=in.nextInt();zy=in.nextInt();//目标点 vis[sx][sy]=1;//起点已经走过 dfs(sx,sy,0);//开始 System.out.print(min); return; } }
来源:https://www.cnblogs.com/lwyy1223-/p/12599011.html