• ZOJ 2100 Seeding


    Seeding

    Problem Description
    It is spring time and farmers have to plant seeds in the field. Tom has a nice field, which is a rectangle with n * m squares. There are big stones in some of the squares. Tom has a seeding-machine. At the beginning, the machine lies in the top left corner of the field. After the machine finishes one square, Tom drives it into an adjacent square, and continues seeding. In order to protect the machine, Tom will not drive it into a square that contains stones. It is not allowed to drive the machine into a square that been seeded before, either.

    Tom wants to seed all the squares that do not contain stones. Is it possible?


    Input

    The first line of each test case contains two integers n and m that denote the size of the field. (1 < n, m < 7) The next n lines give the field, each of which contains m characters. 'S' is a square with stones, and '.' is a square without stones.

    Input is terminated with two 0's. This case is not to be processed.


    Output

    For each test case, print "YES" if Tom can make it, or "NO" otherwise.


    Sample Input

    4 4
    .S..
    .S..
    ....
    ....
    4 4
    ....
    ...S
    ....
    ...S
    0 0


    Sample Output

    YES
    NO

     1 #include<cstdio>
     2 using namespace std;
     3 
     4 bool flag;
     5 int m,n;
     6 char map[10][10];
     7 int d[4][2]={1,0,0,1,-1,0,0,-1};
     8 
     9 void dfs(int x,int y)
    10 {
    11     if(flag)return;
    12     if(x<0||x>=m||y<0||y>=n||map[x][y]=='S')
    13     {
    14         for(int i=0;i<m;i++)
    15         for(int j=0;j<n;j++)
    16         if(map[i][j]=='.')
    17         return;
    18         flag=true;
    19         return;
    20     }
    21     map[x][y]='S';
    22     for(int i=0;i<4;i++)
    23     {
    24         int xx=x+d[i][0];
    25         int yy=y+d[i][1];
    26         dfs(xx,yy);
    27     }
    28     map[x][y]='.';
    29 }
    30 
    31 int main()
    32 {
    33     int i,j;
    34     while(scanf("%d%d",&m,&n),m|n)
    35     {
    36         for(i=0;i<m;i++)
    37         scanf("%s",map[i]);
    38         flag=false;
    39         dfs(0,0);
    40         if(flag)
    41         printf("YES
    ");
    42         else
    43         printf("NO
    ");
    44     }
    45 }


  • 相关阅读:
    Linux查看进程和已知端口是否启动
    plsql安装
    windows中用批处理文件删除n天前的文件
    阿里云服务器25邮件端口问题
    通过rpm安装crontab
    [RHEL7.1]关闭防火墙及SElinux
    有了 itchat, python 调用微信个人号从未如此简单(新增 py3 支持)
    Linux中tty、pty、pts的概念区别
    不用写代码就能实现深度学习?手把手教你用英伟达 DIGITS 解决图像分类问题
    Hadoop 2.7.3 安装配置及测试
  • 原文地址:https://www.cnblogs.com/homura/p/4703515.html
Copyright © 2020-2023  润新知