zoukankan      html  css  js  c++  java
  • 牛客小白月赛4C——病菌感染

    链接:https://www.nowcoder.com/acm/contest/134/C 
    来源:牛客网 

      1 #include <bits/stdc++.h>
      2 using namespace std;
      3 #define N 1005
      4 int a[N][N],dir[2][4]={{-1,0,1,0},{0,1,0,-1}};//四周的格子
      5 int n,m,sum;
      6 
      7 bool judge(int x,int y)//判断周围的病菌数
      8 {
      9     int xx,yy,i;
     10     sum=0;//周围病菌数
     11     for (i=0;i<4;i++)
     12     {
     13         xx=x+dir[0][i];
     14         yy=y+dir[1][i];
     15         if (xx<1||xx>n||yy<1||yy>n)//超出范围
     16         {
     17             continue;
     18         }
     19         if (a[xx][yy]==1)
     20         {
     21             sum++;
     22         }
     23     }
     24     if (sum>=2)
     25     {
     26         return true;
     27     }
     28     return false;
     29 }
     30 
     31 void bfs(int i,int j)//广搜标记被感染的格子
     32 {
     33     if (i<=0||i>n||j<=0||j>n||false==judge(i,j)||a[i][j]==1)//若无a[i][j]==1则会死循环
     34     {
     35         return;
     36     }
     37 
     38     if (true==judge(i,j))
     39     {
     40         a[i][j]=1;
     41         bfs(i,j-1);
     42         bfs(i,j+1);
     43         bfs(i-1,j);
     44         bfs(i+1,j);
     45     }
     46 }
     47 
     48 void test()
     49 {
     50     int i,j;
     51     for (i=1;i<=n;i++)
     52     {
     53         for (j=1;j<=n;j++)
     54         {
     55             printf("%d",a[i][j]);
     56         }
     57         printf("
    ");
     58     }
     59 }
     60 
     61 void solve()
     62 {
     63     int i,j,r,l;
     64     memset(a,0,sizeof(a));
     65     for (i=0;i<m;i++)
     66     {
     67         scanf("%d %d",&r,&l);
     68         a[r][l]=1;
     69     }
     70 //    test();
     71     for (i=1;i<=n;i++)
     72     {
     73         for (j=1;j<=n;j++)
     74         {
     75             if (a[i][j]==0)
     76             {
     77                 bfs(i,j);
     78             }
     79         }
     80     }
     81     for (i=1;i<=n;i++)//看是否全部被感染
     82     {
     83         for (j=1;j<=n;j++)
     84         {
     85             if (a[i][j]==0)
     86             {
     87                 printf("NO
    ");
     88                 return;
     89             }
     90         }
     91      }
     92      printf("YES
    ");
     93      return;
     94 }
     95 
     96 int main()
     97 {
     98     while (scanf("%d %d",&n,&m)!=EOF)
     99     {
    100         solve();
    101 //        test();
    102     }
    103 
    104     return 0;
    105 }
  • 相关阅读:
    面向对象、构造函数的区别
    写一个function,清除字符串前后的空格。(兼容所有浏览器)
    两个DIV高度自适应方法(左右两个DIV高度一样)
    js数组去重
    input框处理删除小图标的功能
    查找显示高亮
    JSON.parse()和JSON.stringify()
    jquery封装
    怎么理解HTML语义化
    html5语义化标签
  • 原文地址:https://www.cnblogs.com/hemeiwolong/p/9194650.html
Copyright © 2011-2022 走看看