面积

面积

  • 分析:根据题意,跟填涂颜色基本一样,就是要在矩形方阵的外面加一圈0,这样就避免了如果第一个就是1不搜索的情况,只要在判断是否越界时扩大一圈边界范围就行,在圈外面的所有0只要被搜索过就标记为1,在圈里面的0搜不到,这样到最后就只有圈里面的0和圈1还没有被标记,只需要开一个计数器,循环一遍标记数组看看有几个数没被标记并且没被标记的数等于0就行。
  • #include<cstdio>
    #include<iostream>
    #include<queue>
    using namespace std;
    int a[50][50],b[50][50],sum=0;
    int dx[4]={0,0,1,-1};//四个方位 
    int dy[4]={1,-1,0,0};
    struct node
    {
        int x,y;
    }now;
    void bfs(int x,int y)
    {
        queue<node> q;
        q.push({x,y});
        while(!q.empty())
        {
            now=q.front();//当前的点 
            q.pop(); 
            for(int i=0;i<4;i++)
            {
                int xx=now.x+dx[i];//往当前点的各个方向前进 
                int yy=now.y+dy[i];
                if(xx>=0&&xx<=11&&yy>=0&&yy<=11&&b[xx][yy]==0&&a[xx][yy]==0)
                {//未越界 还没被标记 等于0 
                    b[xx][yy]=1;//标记 
                    q.push({xx,yy});
                }
            }
        }
    }
    int main()
    {
        for(int i=1;i<=10;i++)
         for(int j=1;j<=10;j++)
          cin>>a[i][j];
        bfs(0,0);
        for(int i=1;i<=10;i++)
        {
            for(int j=1;j<=10;j++)
            {//等于0 没被标记 也就是在1这个圈里面的0 
                 if(a[i][j]==0&&b[i][j]==0)
                     sum++;
            }
        }
        cout<<sum;
        return 0;
     } 

     

posted @ 2022-08-25 12:00  4lovls  阅读(176)  评论(0)    收藏  举报