DFS加剪枝
import java.util.Scanner;
public class Main {
static int n, m, x, y;
static int t;
static boolean get = false;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (true) {
x=-1;y=-1;t=0;
get = false;
n = in.nextInt();
m = in.nextInt();
t = in.nextInt();
in.nextLine();
if (n == 0 && m == 0 && t == 0) {
break;
}
String[][] map = new String[n][m];
for (int i = 0; i < n; i++) {
String str = in.nextLine();
map[i] = str.trim().split("");
if (x == -1) {
for (int j = 0; j < m; j++) {
if (map[i][j].equals("S")) {
x = i;
y = j;
break;
}
}
}
}
find(map, x, y, 0);
if (get) {
System.out.println("YES");
} else {
System.out.println("NO");
}
}
}
public static void find(String[][] map,int x,int y,int time) {
if(time>t||get) {
return ;
}else if(map[x][y].equals("D")&&time==t) {
get=true;
return ;
}else if(map[x][y].equals(".")||map[x][y].equals("S")){
String string=map[x][y];
map[x][y]="X";
if(y+1<m) {if(map[x][y+1]!="X") {find(map, x, y+1,time+1);}}
if(x+1<n) {if(map[x+1][y]!="X") {find(map, x+1, y,time+1);}}
if(x-1>=0) {if(map[x-1][y]!="X") {find(map, x-1, y,time+1);}}
if(y-1>=0) {if(map[x][y-1]!="X") {find(map, x, y-1,time+1);}}
map[x][y]=string;
}
}
}