import java.util.Scanner;
public class Main {
static int N,M,T;
static boolean flag;
static String[][] mg=new String[10][10];
static boolean[][] visit=new boolean[10][10];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int N=sc.nextInt();
int M=sc.nextInt();
int T=sc.nextInt();
int startX = 0,startY = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
mg[i][j]=sc.next();
visit[i][j]=false;
if (mg[i][j]=="S") {
startX=i;
startY=j;
}
}
}
flag=false;
dfs(0,startX,startY);
if (flag==true) {
System.out.println("YES");
} else {
System.out.println("NO");
}
}
}
private static void dfs(int number, int x, int y) {
// TODO Auto-generated method stub
if (number>T||flag) {
return ;
}
else if (number==T) {
if (mg[x][y]=="D") {
flag=true;
}
return ;
}
else if (mg[x][y]=="."||mg[x][y]=="S") {
visit[x][y]=true;
//down
if (x<N-1&&canvisit(x+1,y)) {
dfs(number+1, x+1, y);
}
//up
if (x>0&&canvisit(x-1, y)) {
dfs(number+1, x-1, y);
}
//right
if (y<M-1&&canvisit(x, y+1)) {
dfs(number+1, x, y+1);
}
//left
if (y>0&&canvisit(x, y-1)) {
dfs(number+1, x, y-1);
}
visit[x][y]=false;
}
}
private static boolean canvisit(int x, int y) {
// TODO Auto-generated method stub
if (!visit[x][y]) {
return true;
}
return false;
}
}
代码有些问题 希望大神帮忙纠正