• 1359:围成面积


    题目链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1359

    【思路分析】这个题属于逆向思维,直接统计围成面积很难,换种思路,将面积以外的所有0点置1再统计0数即为围成面积,这样就转换成4连通块的问题了!当然这儿有个小思考就是外围面积置1时一定要从4条边缘开始找0点BFS,所以需要将BFS写成一个函数。代码如下:

     1 #include<iostream>
     2 #include<queue>
     3 using namespace std;
     4 const int n=10;
     5 int a[n+5][n+5];
     6 int nex[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
     7 int ans=0;
     8 struct m{
     9     int x;
    10     int y;
    11 }f, t;
    12 void bfs(int xx, int yy)
    13 {
    14     queue<m> q;
    15     t.x=xx; t.y=yy;
    16     a[t.x][t.y]=1;
    17     q.push(t);
    18     while(!q.empty())
    19     {
    20         f=q.front();
    21         for(int k=0; k<4; k++)
    22         {
    23             int nx=f.x+nex[k][0];
    24             int ny=f.y+nex[k][1];
    25             if(nx>=0 && nx<n && ny>=0 && ny<n && a[nx][ny]==0)
    26             {
    27                 a[nx][ny]=1;
    28                 t.x=nx;  t.y=ny;
    29                 q.push(t);
    30             }
    31         }
    32         q.pop();
    33     }    
    34 }
    35 
    36 int main()
    37 {
    38     
    39     for(int i=0; i<n; i++)
    40         for(int j=0; j<n; j++)
    41             cin>>a[i][j];
    42     
    43     for(int j=0;j<=9;j++)//以上边缘开始bfs置1 
    44         if(a[0][j]==0)bfs(0,j);
    45     for(int j=0;j<=9;j++)//以下边缘开始bfs置1 
    46         if(a[9][j]==0)bfs(9,j);
    47     for(int i=0;i<=9;i++)//以左边缘开始bfs置1 
    48         if(a[0][i]==0)bfs(0,i);
    49     for(int i=0;i<=9;i++)//以右边缘开始bfs置1 
    50         if(a[9][i]==0)bfs(9,i);
    51 //以下注释为测试代码 
    52 //cout<<endl;
    53 //    for(int i=0; i<n; i++){
    54 //        for(int j=0; j<n; j++)cout<<a[i][j]<<" ";
    55 //        cout<<endl;
    56 //    }
    57     for(int i=0; i<n; i++)//最后统计没有置1的所有的点,即面积点数 
    58         for(int j=0; j<n; j++)
    59             if(a[i][j]==0)++ans;    
    60     cout<<ans;
    61     return 0;
    62 }
  • 相关阅读:
    zookeeper、hbase集成kerberos
    hdfs、yarn集成kerberos
    kerberos(一) 详解
    Kerberos(一) 安装
    kerberos 配置错误记录
    javascript自定义滚动条插件,几行代码的事儿
    javascript,css延迟加载器
    DOM: 如何获取元素下的第一个子元素
    自定义标签的可用性
    (转)也谈基于NodeJS的全栈式开发(基于NodeJS的前后端分离)
  • 原文地址:https://www.cnblogs.com/tflsnoi/p/10170855.html
Copyright © 2020-2023  润新知