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;
        }
    }
  • 相关阅读:
    让Android模拟器速度飞起来_Eclipse+BlueStacks调试Android应用【2012-10-30】
    开源镜像站-Android镜像
    字符编码的几篇文章
    [C/C++]_[Unicode转Utf8,Ansi转Unicode,Ansi文件转Utf8文件]
    MSVC下快速Unicode I/O
    edltplus使用正则表达式替换多余空行
    修改CMD的编码
    windows 安裝 gcc 編譯器
    CF369 C(递归 + 回溯)
    VIM支持系统剪切板
  • 原文地址:https://www.cnblogs.com/sphreez/p/8610912.html
Copyright © 2011-2022 走看看