第一次总结:填涂颜色
题目描述
由数字 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;
}
第一次总结:填涂颜色相关推荐
- C语言填涂颜色(染色问题)
填涂颜色 题目描述 由数字 0组成的方阵中,有一任意形状闭合圈,闭合圈由数字 1构成,围圈时只走上下左右 4个方向.现要求把闭合圈内的所有空间都填写成 2.例如:6×6 的方阵(n=6),涂色前和涂色 ...
- P1162 填涂颜色问题(广度优先搜索BFS)
# 填涂颜色 ## 题目描述 由数字 $0$ 组成的方阵中,有一任意形状闭合圈,闭合圈由数字 1 构成,围圈时只走上下左右 4 个方向.现要求把闭合圈内的所有空间都填写成 2.例如:6*6$的方阵(n ...
- 洛谷P1162 填涂颜色(Python搜索)
P1162 填涂颜色https://www.luogu.com.cn/problem/P1162 题目描述 由数字00组成的方阵中,有一任意形状闭合圈,闭合圈由数字11构成,围圈时只走上下左右44个方 ...
- P1162 填涂颜色
填涂颜色 题目描述 由数字 000 组成的方阵中,有一任意形状闭合圈,闭合圈由数字 111 构成,围圈时只走上下左右 444 个方向.现要求把闭合圈内的所有空间都填写成 222.例如:6×66\tim ...
- 洛谷 P1162 填涂颜色
填涂颜色 题目描述 由数字 000 组成的方阵中,有一任意形状闭合圈,闭合圈由数字 111 构成,围圈时只走上下左右 444 个方向.现要求把闭合圈内的所有空间都填写成 222.例如:6×66\tim ...
- 洛谷p1162填涂颜色(dfs写法)
这道题本是放在试炼场bfs里的,但是我觉得dfs好写些 所以就用dfs过了 题目如下 题目描述 由数字0 组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向.现要求把闭合 ...
- 洛谷 P1162 填涂颜色题解
题目描述 由数字00组成的方阵中,有一任意形状闭合圈,闭合圈由数字11构成,围圈时只走上下左右44个方向.现要求把闭合圈内的所有空间都填写成22.例如:6 \times 66×6的方阵(n=6n=6) ...
- 填涂颜色(洛谷-P1162)
题目描述 由数字0 组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向.现要求把闭合圈内的所有空间都填写成2.例如:6X6的方阵(n=6),涂色前和涂色后的方阵如下: 涂 ...
- 广度优先搜索——填涂颜色(洛谷 P1162)
题目选自洛谷P1162 首先讲一下思路:根据题意,当找到第一个1时,其右下必然是圈内的0,那么只要从这个0开始广搜寻找联通块就可以了.(因为圈只有一个,那么当找到第一个1之后便要打断循环,很重要!) ...
最新文章
- 为什么socket接收大数据的时候接收不完全,出现丢包?
- Codeforces Beta Round #11 A. Increasing Sequence 贪心
- java中除金额_《java中把金额以3位分开的计数法》
- Activity生命周期的学习和验证
- Java对象转换成JSON对象/JSON对象转换成JSON字符串/JSON字符串转换成JS对象
- mysql连接服务密码_Hydra爆破常见服务密码
- 你不知道的js中关于this绑定机制的解析[看完还不懂算我输]
- UE3 中文教程主页
- VC MFC按钮(CButton)控件
- 【Python爬虫教学】百度篇·手把手教你抓取百度搜索关键词后的页面源代码
- 中国制造显威,动力电池出货量翻倍增长,已居于绝对领先地位
- 错排问题(排列组合习题)
- MQ高级(四)MQ集群
- AD账号属性的 PwdLastSet 和 PasswordLastSet 有什么区别?
- Messidor视网膜数据集
- sql安装出错,安装程序配置服务器失败的解决方案 [转]
- 来闯关吗?一个有趣的 Python 解谜网站!我已经懵逼了!
- VC++操作Excel 2007
- 银行业务中的清算指的是什么?
- 数据库基础理论一——候选码求定为主要导向