首页 > 其他分享 >洛谷P1162 填涂颜色题解

洛谷P1162 填涂颜色题解

时间:2024-09-27 21:50:57浏览次数:3  
标签:填涂 00 洛谷 int 题解 闭合 paint include 方阵

老规矩上题目:

题目描述

由数字 00 组成的方阵中,有一任意形状的由数字 11 构成的闭合圈。现要求把闭合圈内的所有空间都填写成 22。例如:6×66×6 的方阵(n=6n=6),涂色前和涂色后的方阵如下:

如果从某个 00 出发,只向上下左右 44 个方向移动且仅经过其他 00 的情况下,无法到达方阵的边界,就认为这个 00 在闭合圈内。闭合圈不一定是环形的,可以是任意形状,但保证闭合圈内的 00 是连通的(两两之间可以相互到达)。

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

输入格式

每组测试数据第一行一个整数 n(1≤n≤30)n(1≤n≤30)。

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

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

输出格式

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

输入输出样例

输入 #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

说明/提示

对于 100%100% 的数据,1≤n≤301≤n≤30。

这一题我看了,第一反应是无解;

毫无思路,于是我点开了标签

 

这是一道广搜啊!!!

于是我开始思考如何广搜

这是我想到了!!!

0110

1001

0110

例如这幅图

我们把它扩展一下

从0开始n+1结束

000000

001100

010010 

001100

000000

如果遇到1就跳过,不是1的就换成1,由于内层的0是被包裹着的,搜完了后

111111

111111

110011 

111111

111111

就是这样

这是在统计一下0的个数不就完了

于是我提交了

AC了!!!

代码:

#include <bits/stdc++.h>//万能头文件
#include <iostream>//无聊多打几个头文件
#include <cmath>//无聊多打几个头文件
#include <cstring>//无聊多打几个头文件
using namespace std;//命名空间
int n;//n行n列
int a[35][35],mark[35][35],tmp;//标记二维数组
struct paint{//方向
	int x,y;
};
queue<paint> q;//队列
int fx[4]={-1,1,0,0};//方向数组
int fy[4]={0,0,-1,1};//方向数组
int main()//代码开始
{
	cin>>n;//输入
	for(int i=1;i<=n;++i)
	{
		for(int j=1;j<=n;++j){
			cin>>tmp;
			if(tmp==1) a[i][j]=1;//在标记数组中标记
		} 
	}
	mark[0][0]=1;//标记第一个
	q.push(paint{0,0});//放入第一个
	//广搜模版
	while(!q.empty())//还有数
	{
		paint p=q.front();//去队头
		q.pop();
		for(int i=0;i<4;++i)
		{
			int x=p.x+fx[i];
			int y=p.y+fy[i];
			if(x<0||x>n+1||y<0||y>n+1) continue;
			if(a[x][y] == 0 and mark[x][y] == 0)
			{
				mark[x][y]=1;
				q.push(paint{x,y});
			}
		}
	}
	for(int i=1;i<=n;++i)
	{
		for(int j=1;j<=n;++j){
			if(a[i][j]==0 and mark[i][j]==0) cout<<2<<" ";
			else if(a[i][j]==1 ) cout<<1<<" ";
			else cout<<0<<" ";
		} 
		cout<<endl;
	}
	return 0;//愉快的结束了
}

 结束了

标签:填涂,00,洛谷,int,题解,闭合,paint,include,方阵
From: https://blog.csdn.net/djy2024/article/details/142602959

相关文章

  • 题解 HZOJ 284 超市卖货 C/C++
    题目传送门:超市卖货-题目-OnlineJudge(haizeix.com)https://oj.haizeix.com/problem/284思路:每次寻找价格最高的商品,并尝试卖掉它:寻找未卖出商品的日期,优先锁定其保质期最后一天,若该日期已卖出则继续向前寻找能找到未卖出商品的日期时,收入增加,标记该日期代码实现:为......
  • Echarts图表知识点汇总及请求django服务器后端跨域问题解决
    1.引入echartsvue3中通过npm引入:npminstallecharts--saveimport*asechartsfrom'echarts';//基于准备好的dom,初始化echarts实例varmyChart=echarts.init(document.getElementById('main'));//绘制图表myChart.setOption({title:{text:'ECha......
  • P9019 [USACO23JAN] Tractor Paths P 题解
    P9019[USACO23JAN]TractorPathsP题解难度其实绝对不止蓝题。先考虑第一问。维护任意两点之间的最短路是困难的,难以dp或是采取其它方法解决。难以算最短路就转换思路,考虑从\(x\)走\(p\)步能走到哪。考虑到这个东西是有单调性的,也就是说对于\(x<y<z\),从\(x\)能走到......
  • Codeforces Round 944 (Div. 4) A~G题解
    A\(min\)函数和\(max\)函数的使用,按照格式输出即可。#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;typedefpair<int,int>PII;voidsolve(){intx,y;cin>>x>>y;cout<<min(x,y)<<'......
  • Codeforces Round 973题解(E)
    E.PrefixGCD假设我们从一个空集合\(b\)开始,不断从\(a\)数组中选择一个元素添加到\(b\)集合的尾部,当把\(a\)数组的元素全部添加到\(b\)中后,得到的\(b\)即为所求的rearrange后的\(a\)。结论1:每次选择使得其和当前\(b\)中所有元素的最大公约数最小的那个\(a_i\)加入到\(b\)的末......
  • ZZJC新生训练赛第一场题解
    先给出比赛链接:https://ac.nowcoder.com/acm/contest/91452下面说一下难度分层:(同一难度下按字典序排序)Easy(简单):B,FMedium(中等):A,E,HHard(困难):C,GAnti-AK(防AK):D,Icin.tie(nullptr)->sync_with_stdio(false);//加速输入输出的A游游的整数翻转将所......
  • 【洛谷】P4819 [中山市选] 杀人游戏 的题解
    【洛谷】P4819[中山市选]杀人游戏的题解题目传送门题解Tarjan我可爱的Tarjan嘻嘻qaq枚举每一个点,然后枚举每条出边,如果相连的两个点在同一个强连通分量中,或者xx......
  • 【洛谷】AT_abc178_d [ABC178D] Redistribution 的题解
    【洛谷】AT_abc178_d[ABC178D]Redistribution的题解洛谷传送门AT传送门题解一个水水的动态规划,阿巴巴巴。题目大概是这样:给定一个正整数SSS,问有多少个数满足以......
  • 【2024秋#113】锦城ACM周测题解
    2024秋#112】锦城ACM周测题解A.awa1思路这里是对答案进行二分,我们预测一个答案的范围,取这个范围的中点,试探是否可行。如果可行,将这个范围的右边的范围缩小到mid(注意我们所求是最短时间,所以当mid可行的时候我们是将预测的最大的值变小),如果不可行,说明我们预测的这个范围左边......
  • Pbootcms源码上传安装后前端显示错乱乱码问题解决方案
    PbootCMS前端显示错乱或乱码问题可能是由多种原因造成的,下面是一些可能的解决方案:检查字符集设置:确认前端页面的字符集设置是否正确。通常在HTML头部会有一个<meta>标签定义字符集,例如<metacharset="UTF-8">。同时检查PbootCMS后台的字符集设置是否与前端一致,确保数据库和......