深搜算法(是否能喝到星巴克)
import java.util.*;
import java.math.*;
public class Main {
static int n,m,sx,sy,ex,ey;
static char map[][];
static boolean visit[][];
static boolean dui=false;
static int move[][]={{1,0},{-1,0},{0,1},{0,-1}};
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
n = input.nextInt();
m = input.nextInt();
String ss = input.nextLine();
map = new char[n][m];
visit = new boolean[n][m];
sx=0;sy=0;ex=0;ey=0;
for (int i = 0; i < n; i++) {
String s = input.nextLine();
for (int i1 = 0; i1 < m; i1++) {
map[i][i1] = s.charAt(i1);
if(s.charAt(i1)=='S')
{
sx = i;
sy = i1;
}
if(s.charAt(i1)=='E')
{
ex = i;
ey = i1;
}
}
}
visit[sx][sy] = true;
dfs(sx,sy);
if(dui)
System.out.println("Yes");
else
System.out.println("No");
}
public static void dfs(int x,int y)
{
visit[x][y] = true;
if(x==ex&&y==ey||dui)
{
dui = true;
return;
}
for(int i=0;i<4;i++)
{
int dx = x+move[i][0],dy = y +move[i][1];
if(dx>=0&&dx<n&&dy>=0&&dy<m&&!visit[dx][dy]&&map[dx][dy]!='#'&&!dui)
{
dfs(dx,dy);
}
}
}
}
查看17道真题和解析