• codevs1293送给圣诞夜的极光(bfs)


    1293 送给圣诞夜的极光

     

     时间限制: 1 s
     空间限制: 128000 KB
     题目等级 : 黄金 Gold
     
     
    题目描述 Description

    圣诞老人回到了北极圣诞区,已经快到12点了。也就是说极光表演要开始了。这里的极光不是极地特有的自然极光景象。而是圣诞老人主持的人造极光。 
      轰隆隆……烟花响起(来自中国的浏阳花炮之乡)。接下来就是极光表演了。 
      人造极光其实就是空中的一幅幅n*m的点阵图像。只是因为特别明亮而吸引了很多很多小精灵的目光,也成为了圣诞夜最美丽的一刻。 
      然而在每幅n*m的点阵图像中,每一个点只有发光和不发光两种状态。对于所有的发光的点,在空中就形成了美丽的图画。而这个图画是以若干个(s个)图案组成的。对于图案,圣诞老人有着严格的定义:对于两个发光的点,如果他们的曼哈顿距离(对于A(x1,y1)和B(x2,y2),A和B之间的曼哈顿距离为|x1-x2|+|y1-y2|)小于等于2。那么这两个点就属于一个图案…… 
      小精灵们一边欣赏着极光,一边数着每一幅极光图像中的图案数。伴着歌声和舞蹈,度过了美丽的圣诞之夜。^_^ 

    输入描述 Input Description

    第一行,两个数n和m。(1<=n,m<=100) 
    接下来一共n行,每行m个字符。对于第i行第j个字符,如果其为“-”,那么表示该点不发光,如果其为“#”,那么表示该点发光。不可能出现其他的字符。 

    输出描述 Output Description

    第一行,一个数s。

    样例输入 Sample Input

    19 48

    ------------------------------------------------

    ---####-----#-----#----------------------####---

    --######----#-----#---------------------######--

    -########--#-#---#-#####--#-##-##---#--########-

    -###--###--#-#---#-#----#-##-##--#--#--###--###-

    -###--###--#--#-#--######-#--#---#-#---###--###-

    -########--#--#-#--#------#--#----##---########-

    --######---#---#---######-#--#-----#----######--

    ---####----------------------------#-----####---

    ----------------------------------#-------------

    ------------------------------------------------

    ---###--#--------#------#-----------------------

    --#---#-#---------------#-----------------------

    -#------#-##--#-##--##-###-#-##-###--###-#--##--

    -#------##--#-##-#-#----#--##--#---##---##-#----

    -#------#---#-#--#--#---#--#---#---##----#--#---

    --#---#-#---#-#--#---#--#--#---#---##---##---#--

    ---###--#---#-#--#-##---#--#---#---#-###-#-##---

    ------------------------------------------------

    样例输出 Sample Output

    4

    /*
    我们考虑提前把曼哈短距离处理出来,搜索时只走曼哈顿距离<=2的点 
    然后从第一个发亮的地方开始搜索,把它弄灭,再把能到的地方弄灭
    最后统计还亮着的个数就是答案 
    */
    #include<cstdio>
    #include<iostream>
    #include<cstring>
    
    using namespace std;
    int dx[]= {0,0,0,1,-1,1,1,-1,-1,2,-2,0,0},
              dy[]= {0,1,-1,0,0,1,-1,1,-1,0,0,2,-2};//This is important!
    bool g[110][110]= {0};
    int n,m,ans;
    struct node
    {
        int x,y;
    }q[10010];
    
    void bfs(int x,int y)
    {
        int head=1,tail=1;
        q[1].x=x;q[1].y=y;
        g[x][y]=0;
        while(head<=tail)
        {
            x=q[head].x,y=q[head].y;
            head++;
            for(int i=1;i<=12;i++)
            {
                int xx=x+dx[i],yy=y+dy[i];
                if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&g[xx][yy])
                {
                    tail++;
                    q[tail].x=xx;q[tail].y=yy;    
                    g[xx][yy]=0;
                }
            }
        }
    }
    
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
          for(int j=1;j<=m;j++)
          {
              char c; cin>>c;
              if(c=='#') g[i][j]=1;
          }
        ans=0;
        for(int i=1;i<=n;i++)
          for(int j=1;j<=m;j++)
              if(g[i][j])
              {
                  ans++;bfs(i,j);
            }
        printf("%d
    ",ans);
        return 0;
    }
    折花枝,恨花枝,准拟花开人共卮,开时人去时。 怕相思,已相思,轮到相思没处辞,眉间露一丝。
  • 相关阅读:
    Java学习开篇
    《我的姐姐》
    世上本无事,庸人自扰之
    这48小时
    补觉
    淡定
    es java api 设置index mapping 报错 mapping source must be pairs of fieldnames and properties definition.
    java mongodb groupby分组查询
    linux 常用命令
    mongodb too many users are authenticated
  • 原文地址:https://www.cnblogs.com/L-Memory/p/6415888.html
Copyright © 2020-2023  润新知