题目描述

由数字 00 组成的方阵中,有一任意形状闭合圈,闭合圈由数字 11 构成,围圈时只走上下左右 44 个方向。现要求把闭合圈内的所有空间都填写成 22。例如:6\times 66×6 的方阵(n=6n=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(1 \le n \le 30)n(1≤n≤30)。

接下来 nn 行,由 00 和 11 组成的 n \times nn×n 的方阵。

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

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

输出格式

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

说明/提示

1<=n<=30

思路:0有两种情况,一种是在包围范围内,另外一种是在包围范围外,为了区别这两种,我们使用另外一个数组(brr)来进行存储判断的结果,在判断函数中,我们使用队列来依次弹出数组来进行判断,队列弹出的数暂先使用结构体来存储数据,弹出数据后,在进行上下左右的判断,满足条件我们就进行标记,不满足就进行下一个判断。(纯暴力搜索,我们只需要对数组中的数一个一个进行判断,一个一个标记就可以了)。

//我们使用一个数组来存储数据,一个数组存储判断结果
//如果数组中一个数等于0的同时,又存在上下左右有等于1的,该数就被包裹在内数
//打印时如果该数等于0的同时,判断数组等于1,就为包裹的数
#include<bits/stdc++.h>
using namespace std;
int n,arr[35][35]={0},brr[35][35]={0},tmep;
struct point{int x,y;
};
int dx[4]={0,0,-1,1},dy[4]={-1,1,0,0};//进行四周寻找,要确保相加等于0
queue<point> q;
void intput()
{brr[0][0]=1;scanf("%d",&n);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){scanf("%d",&tmep);if(tmep!=0)arr[i][j]=1;}
}
void print()
{for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(arr[i][j]==0&&brr[i][j]==0)//注意判断条件 printf("2 ");else if(arr[i][j]==1)printf("1 ");elseprintf("0 ");} printf("\n");}
}
void judge()
{q.push(point{0,0});while(!q.empty())//将闭合区间外面的0全部标记为1 {point p=q.front();//找到队列中的队列的第一个元素 q.pop();//在不断进行删除第一个元素 for(int i=0;i<4;i++){int x=p.x+dx[i];int y=p.y+dy[i];if(x<0||x>n+1||y<0||y>n+1)//越界情况 continue;if(arr[x][y]==0&&brr[x][y]==0)//为0且未被搜索过{brr[x][y]=1;q.push(point{x,y});}}}
}
int main()
{intput();judge();print();return 0;
}

第一次总结:填涂颜色相关推荐

  1. C语言填涂颜色(染色问题)

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

  2. P1162 填涂颜色问题(广度优先搜索BFS)

    # 填涂颜色 ## 题目描述 由数字 $0$ 组成的方阵中,有一任意形状闭合圈,闭合圈由数字 1 构成,围圈时只走上下左右 4 个方向.现要求把闭合圈内的所有空间都填写成 2.例如:6*6$的方阵(n ...

  3. 洛谷P1162 填涂颜色(Python搜索)

    P1162 填涂颜色https://www.luogu.com.cn/problem/P1162 题目描述 由数字00组成的方阵中,有一任意形状闭合圈,闭合圈由数字11构成,围圈时只走上下左右44个方 ...

  4. P1162 填涂颜色

    填涂颜色 题目描述 由数字 000 组成的方阵中,有一任意形状闭合圈,闭合圈由数字 111 构成,围圈时只走上下左右 444 个方向.现要求把闭合圈内的所有空间都填写成 222.例如:6×66\tim ...

  5. 洛谷 P1162 填涂颜色

    填涂颜色 题目描述 由数字 000 组成的方阵中,有一任意形状闭合圈,闭合圈由数字 111 构成,围圈时只走上下左右 444 个方向.现要求把闭合圈内的所有空间都填写成 222.例如:6×66\tim ...

  6. 洛谷p1162填涂颜色(dfs写法)

    这道题本是放在试炼场bfs里的,但是我觉得dfs好写些 所以就用dfs过了 题目如下 题目描述 由数字0 组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向.现要求把闭合 ...

  7. 洛谷 P1162 填涂颜色题解

    题目描述 由数字00组成的方阵中,有一任意形状闭合圈,闭合圈由数字11构成,围圈时只走上下左右44个方向.现要求把闭合圈内的所有空间都填写成22.例如:6 \times 66×6的方阵(n=6n=6) ...

  8. 填涂颜色(洛谷-P1162)

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

  9. 广度优先搜索——填涂颜色(洛谷 P1162)

    题目选自洛谷P1162 首先讲一下思路:根据题意,当找到第一个1时,其右下必然是圈内的0,那么只要从这个0开始广搜寻找联通块就可以了.(因为圈只有一个,那么当找到第一个1之后便要打断循环,很重要!) ...

最新文章

  1. 为什么socket接收大数据的时候接收不完全,出现丢包?
  2. Codeforces Beta Round #11 A. Increasing Sequence 贪心
  3. java中除金额_《java中把金额以3位分开的计数法》
  4. Activity生命周期的学习和验证
  5. Java对象转换成JSON对象/JSON对象转换成JSON字符串/JSON字符串转换成JS对象
  6. mysql连接服务密码_Hydra爆破常见服务密码
  7. 你不知道的js中关于this绑定机制的解析[看完还不懂算我输]
  8. UE3 中文教程主页
  9. VC MFC按钮(CButton)控件
  10. 【Python爬虫教学】百度篇·手把手教你抓取百度搜索关键词后的页面源代码
  11. 中国制造显威,动力电池出货量翻倍增长,已居于绝对领先地位
  12. 错排问题(排列组合习题)
  13. MQ高级(四)MQ集群
  14. AD账号属性的 PwdLastSet 和 PasswordLastSet 有什么区别?
  15. Messidor视网膜数据集
  16. sql安装出错,安装程序配置服务器失败的解决方案 [转]
  17. 来闯关吗?一个有趣的 Python 解谜网站!我已经懵逼了!
  18. VC++操作Excel 2007
  19. 银行业务中的清算指的是什么?
  20. 数据库基础理论一——候选码求定为主要导向

热门文章

  1. (转)从P1到P7——我在淘宝这7年
  2. Pluecker coordinates普吕克坐标系介绍
  3. Linux在加载模块时报insmod: error inserting xxx.ko -1 File exists这个错
  4. Selenium中的By模块
  5. poi设置单元格背景颜色
  6. 【KMP】ZOJ-3587-Marlon's String
  7. Linux Kernel Development读书笔记
  8. Revit API:View 视图概述
  9. latex里图片大小如何调整_调整LaTeX文档页面的大小
  10. 负反馈放大电路的电压放大倍数计算