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<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n,flag=1,ff,tot=1;
    int dx[4]={0,0,1,-1};
    int dy[4]={1,-1,0,0};
    int map[35][35],use[35][35];
    void dfs(int x,int y,int tot){
        use[x][y]=tot;
        for(int i=0;i<4;i++){
            int cx=x+dx[i];
            int cy=y+dy[i];
            if(cx>=1&&cx<=n&&cy>=1&&cy<=n&&!use[cx][cy]){
                if(cx==1||cx==n||cy==1||cy==n)    flag=0;
                dfs(cx,cy,tot);
            }
        }
    }
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++){
                scanf("%d",&map[i][j]);
                if(map[i][j])    use[i][j]=1;
            }
        for(int i=1;i<=n;i++){
            ff=0; 
            for(int j=1;j<=n;j++)
                if(!use[i][j]){
                    ff=1;tot++;flag=1;
                    dfs(i,j,tot);
                    if(flag)    break;
                }
            if(flag&&ff)    break; 
        } 
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                if(use[i][j]==tot)    map[i][j]=2;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++)
                cout<<map[i][j]<<" ";
            cout<<endl;
        }
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    nginx 详解--概念解释以及配置---转载
    jmeter和loadrunner测试结果差异大-web页面静态资源下载--转载
    一、性能测试的八大类--转载
    fiddler学习总结--手机端(APP/微信小程序)抓包--转载
    HTTP协议详解(真的很经典)--转载
    oracle修改表名和列名的多种方式
    LR web_custom_request
    web_add_cookie()
    Linux tar命令
    Linux下zip与unzip命令使用详解
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7899542.html
Copyright © 2011-2022 走看看