标签:个数 起点 ext return port system pre 深搜 目标
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;
}
}
标签:个数 起点 ext return port system pre 深搜 目标
原文地址:https://www.cnblogs.com/lwyy1223-/p/12599011.html