import java.util.Scanner;
/**
* Created by m1786 on 2017/4/2.
* 寻找一个可行解
*/
public class 农民种地 {
static int n;
static int m;
static int visited;
static boolean flag;
static int count;
static char a[][]=new char[4][4];
static String str[]=new String[4];
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
while (true) {
count=0;
m = sc.nextInt();
n = sc.nextInt();
sc.nextLine();
if(m==0&&n==0)
return ;
for (int i = 0; i < n; i++)
str[i] =sc.nextLine();
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
a[i][j] = str[i].charAt(j);
visited=0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (a[i][j] == 'S')
visited++;
dfs(0, 0);
if (flag){
System.out.println("YES");
flag=false;
}
else
System.out.println("NO");
}
}
static void dfs(int x, int y) {
if (x < 0 || y < 0 || x >= n || y >= m)
return;
if (a[x][y] == 'S')
return;
if (flag) return;
count++;
if(count>1500)return;//递归次数限制
a[x][y] = 'S';
visited++;
if (visited == m * n) {
flag = true;
return;
}
dfs(x + 1, y);
dfs(x, y + 1);
dfs(x - 1, y);
dfs(x, y - 1);
visited--;
a[x][y] = '.';
}
}
农民种地(图的搜索)
最新推荐文章于 2021-03-10 04:49:48 发布