zoukankan      html  css  js  c++  java
  • P1162 填涂颜色

    题目描述

    由数字0 组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向。现要求把闭合圈内的所有空间都填写成2.例如:6X6的方阵(n=6),涂色前和涂色后的方阵如下:

    0 0 0 0 0 0
    0 0 1 1 1 1
    0 1 1 0 0 1
    1 1 0 0 0 1
    1 0 0 0 0 1
    1 1 1 1 1 1
    0 0 0 0 0 0
    0 0 1 1 1 1
    0 1 1 2 2 1
    1 1 2 2 2 1
    1 2 2 2 2 1
    1 1 1 1 1 1

    输入输出格式

    输入格式:

    每组测试数据第一行一个整数:n。其中n(1<=n<=30)

    接下来n行,由0和1组成的nXn的方阵。

    方阵内只有一个闭合圈,圈内至少有一个0。

    //感谢黄小U饮品指出本题数据和数据格式不一样. 已修改(输入格式)

    输出格式:

    已经填好数字2的完整方阵。

    输入输出样例

    输入样例#1: 复制
    6
    0 0 0 0 0 0
    0 0 1 1 1 1
    0 1 1 0 0 1
    1 1 0 0 0 1
    1 0 0 0 0 1
    1 1 1 1 1 1
    
    输出样例#1: 复制
    0 0 0 0 0 0
    0 0 1 1 1 1
    0 1 1 2 2 1
    1 1 2 2 2 1
    1 2 2 2 2 1
    1 1 1 1 1 1
    

    说明

    1<=n<=30

    #include<bits/stdc++.h>
    using namespace std;
    struct pos
    {
        int x;
        int y;
    };
    bool mark[32][32];
    int pic[32][32],dx[]= {0,0,1,-1},dy[]= {1,-1,0,0},n;
    queue<pos>q;
    void bfs(int x,int y)
    {
        int tx,ty;
        q.push(pos{x,y});
        mark[x][y]=true;
        while(!q.empty())
        {
            tx=q.front().x;
            ty=q.front().y;
            q.pop();
            for(int i=0; i<4; i++)
            {
                if(tx+dx[i]<0||ty+dy[i]<0||tx+dx[i]>n+1||ty+dy[i]>n+1||mark[tx+dx[i]][ty+dy[i]])continue;
                q.push(pos{tx+dx[i],ty+dy[i]});
                mark[tx+dx[i]][ty+dy[i]]=true;
            }
        }
    }
    int main()
    {
        memset(pic,0,sizeof(pic));
        memset(mark,0,sizeof(mark));
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                cin>>pic[i][j];
                mark[i][j]=pic[i][j];
            }
        }
        bfs(0,0);
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                if(mark[i][j])cout<<pic[i][j]<<" ";
                else cout<<"2"<<" ";
            }
            cout<<endl;
        }
    }
  • 相关阅读:
    命名规则
    数据库的基本概念(三大范式,数据)
    集合的排序
    装箱拆箱
    异常处理
    单行函数
    表管理
    创建表,插入列....
    PL/SQL 块
    单行函数的案例
  • 原文地址:https://www.cnblogs.com/sphreez/p/8610912.html
Copyright © 2011-2022 走看看