洛谷 P1162 填涂颜色题解

题目描述

由数字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(1n30)

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

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

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

输出格式

已经填好数字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

说明/提示

1 \le n \le 301n30


 

题解

这道题有一个简单的算法就是输入时将所有为0的数据都填写为2,然后从4个边向内部进行BFS,如果搜索到2就将其改为0,并继续搜索,如果搜索到1或0就停止搜索。

  1 #include <iostream>
  2 #include <stdio.h>
  3 #include <math.h>
  4 #include <algorithm>
  5 #include <string.h>
  6 
  7 using namespace std;
  8 
  9 const int MAXN = 105;
 10 int n, map[MAXN][MAXN], vis[MAXN][MAXN];
 11 int pos[4][2] = {0, 1, 0, -1, 1, 0, -1, 0};
 12 
 13 struct Node
 14 {
 15     int x, y;
 16 };
 17 
 18 Node q[MAXN];
 19 int front, rear;
 20 int a, b;
 21 
 22 void bfs()
 23 {
 24     Node now;
 25     now.x = a;
 26     now.y = b;
 27     if(map[a][b] != 2)
 28     {
 29         return;
 30     }
 31     front = rear = 0;
 32     q[rear] = now;
 33     rear++; 
 34     while(front < rear)
 35     {
 36         now = q[front++]; 
 37         if(map[now.x][now.y] == 2)
 38         {
 39             map[now.x][now.y] = 0;
 40         }
 41         if(now.x == 7)
 42         {
 43             now.x = 7;
 44         }
 45         for(int i = 0; i < 4; i++) 
 46         {
 47             int nx = now.x + pos[i][0]; 
 48             int ny = now.y + pos[i][1]; 
 49             if(nx <= n && nx > 0 && ny <= n && ny > 0  
 50                 && vis[nx][ny] == false 
 51                 && map[nx][ny] == 2) 
 52             {
 53                 map[nx][ny] = 0;
 54                 vis[nx][ny] = true;
 55                 q[rear].x = nx;
 56                 q[rear].y = ny;
 57                 rear++;
 58             }
 59         } 
 60     }
 61 }
 62 
 63 
 64 int main()
 65 {
 66     cin >> n;
 67     for(int i = 1; i <= n; i++)
 68     {
 69         for(int j = 1; j <= n; j++)
 70         {
 71             cin >> map[i][j];
 72             if(map[i][j] == 0)
 73             {
 74                 map[i][j] = 2;
 75             }
 76         }
 77     }
 78     for(int i = 1; i <= n; i++)
 79     {
 80         a = 1;
 81         b = i;
 82         bfs();
 83     }
 84     for(int i = 1; i <= n; i++)
 85     {
 86         a = n;
 87         b = i;
 88         bfs();
 89     }
 90     for(int i = 1; i <= n; i++)
 91     {
 92         a = i;
 93         b = 1;
 94         bfs();
 95     }
 96     for(int i = 1; i <= n; i++)
 97     {
 98         a = i;
 99         b = n;
100         bfs();
101     }
102     for(int i = 1; i <= n; i++)
103     {
104         for(int j = 1; j <= n; j++)
105         {
106             cout << map[i][j] << " ";
107         }
108         cout << endl;
109     }
110     return 0;
111 }

这个BFS并不难写,不过当时犯了一个小错误,导致2/3/4个样例都是WA,特别是第2个样例在本机输出的结果和标准答案一致,但是提交后总是说一个位置应该为0,输出了2。查了很久,最后发现是把pos[4][2]写成了pos[2][4]。数组定义错了,导致遍历时移动的位置错误了,而且本机的对应内存的数据和测试机不同,所以在本机上是过了,但是测试机没有过。

转载于:https://www.cnblogs.com/zealsoft/p/11404420.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568934.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SyntaxError: invalid syntax-python报错

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行&#xff01; 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xf…

洛谷 P2921 在农场万圣节Trick or Treat on the Farm题解

题意翻译 题目描述 每年&#xff0c;在威斯康星州&#xff0c;奶牛们都会穿上衣服&#xff0c;收集农夫约翰在N(1<N<100&#xff0c;000)个牛棚隔间中留下的糖果&#xff0c;以此来庆祝美国秋天的万圣节。 由于牛棚不太大&#xff0c;FJ通过指定奶牛必须遵循的穿越路线来…

TypeError: can‘t send non-None value to a just-started generator-python报错问题

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xff09; TypeError: can’t send non-None value to a just-starte…

Redux概览

简介 Redux 是一个有用的架构Redux 的适用场景&#xff1a;多交互、多数据源工作流程图 action 用户请求 //发出一个action import { createStore } from redux; const store createStore(fn);//其中的type属性是必须的&#xff0c;表示 Action 的名称。其他属性可以自由设置 …

详解python中的yield(生成器)

yield1.yield与return的异同点2.yield使用的好处3.具体实例理解生成器的用法实例一实例二实例三1.yield与return的异同点 相同&#xff1a;都可以返回函数执行的结果 不同点&#xff1a; return是用来返回具体的某个值。 yield一般与循环一起用&#xff0c;被称之生成器&…

洛谷 P1219 八皇后题解

题目描述 检查一个如下的6 x 6的跳棋棋盘&#xff0c;有六个棋子被放置在棋盘上&#xff0c;使得每行、每列有且只有一个&#xff0c;每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。 上面的布局可以用序列2 4 6 1 3 5来描述&#xff0c;第i个数字表示在第i行的相…

Python猜字游戏(用函数)(最新版)

#codingutf-8#猜字游戏#导入随机数 import random#判断数的大小与答案的大小 def guess_judge(num):while (True):guess_judge_num get_input_num()if (guess_judge_num num):print("太棒了&#xff0c;答对了")breakelif (guess_judge_num > num):print("…

java文件名判断练习

public class HelloWorld { public static void main(String[] args) { // Java文件名 String fileName "HelloWorld.java"; // 邮箱 String email "laurenyangimooc.com"; // 判断.java文件名是否正确&#xff1a;合法的文件名应该以.java结尾 /* 参考…

node中间件KOA函数

const Koa require(koa);const app new Koa()//应用程序对象 中间件// 发送HTTP KOA 接手HTTP//中间件(其实就是 函数)function test(){console.log("seven month");}//当请求发送过来的时候&#xff0c;将函数&#xff08;中间件&#xff09;注册到程序上//前端发…

python不定长参数详解

不定长参数1.不定长参数两种基本形式&#xff1a;2.实例2.1实例一2.2实例二2.3实例三2.4实例四2.5实例五https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出处&#xff0…

TypeError: missing 1 required keyword-only argument-python中的报错问题

如下图所示&#xff0c;报错为TypeError: JayChou() missing 1 required keyword-only argument: ‘c’ 翻译过来是&#xff1a;TypeError:JayChou&#xff08;&#xff09;缺少1个仅限关键字的参数&#xff1a;“c” 报错代码&#xff1a; #codingutf-8def JayChou(a, *b, …

brython的问题

brython 挺不错&#xff0c;但有bug。 再brython中使用mpmath做精确计算。 发现&#xff1a; int((10365497382627524465995480721708502202835782160567615922664140839297673785867108053215069740783364534873417778099632142363871844991858866483475618976713337522230394…

xshell下载及连接Linux

xshell的下载及连接Linux一、下载二、连接Linux一、下载 网址&#xff1a;https://www.netsarang.com/zh/xshell/ 1进入主页后下滑点击下载 2.不要去安装盗版&#xff0c;会出现一些问题。选择家庭版即可&#xff0c;点击免费授权页面 3.填上你的姓名和邮件&#xff0c;再勾…

PageHelper只对紧跟着的第一条SQL起作用

这个sql的中心思想就是根据查询到的schema然后分别查询schema中的相关数据再用union all将结果及拼接在一起。LocServiceImpl.findAllLoc(Loc loc) Overridepublic List<Loc> findAllLoc(Loc loc) {try {HashMap<String,Object> map new HashMap<String,Object…

xshell更改背景颜色,解决乱码问题及更改字体及字体大小

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xff09; 这三个键分别是更改背景颜色&#xff0c;解决乱码问题&…

PL/SQL Developer的错误提示弹框的文本显示乱码问题

问题&#xff1a;Windows中文环境下&#xff0c;PL/SQL Developer的错误提示弹框文本为乱码&#xff0c;如下&#xff1a; 解决过程&#xff1a;1.使用SELECT * FROM v$nls_parameters;查询得知服务器的字符集编码为&#xff1a;  NLS_LANGUAGESIMPLIFIED CHINESE  NLS_CHA…

xftp连接linux及xftp下载安装

xftp一、下载二、安装三、Xftp连接linux一、下载 网址&#xff1a;https://www.netsarang.com/zh/xftp/ 1.打开这个网址后&#xff0c;点击下图的下载 2.不要去下载盗版&#xff0c;我们可以下载官网的免费版&#xff0c;点击家庭版的免费授权页面 3.接下来再填写你的姓名和…

洛谷 P2722 总分题解

题目描述 我们可以从几个种类中选取竞赛的题目,这里的一个"种类"是指一个竞赛题目的集合,解决集合中的题目需要相同多的时间并且能得到相同的分数。你的任务是写一个程序来告诉USACO的职员,应该从每一个种类中选取多少题目,使得解决题目的总耗时在竞赛规定的时间里并…

xshell与xftp如何实现相互连接

xshell与xftp互联工具操作步骤1.xftp连接xshell2.xshell连接xftphttps://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行&#xff01; 如有转载&#xff0…

洛谷 P2725 邮票题解

题目背景 给一组 N 枚邮票的面值集合&#xff08;如&#xff0c;{1 分&#xff0c;3 分}&#xff09;和一个上限 K —— 表示信封上能够贴 K 张邮票。计算从 1 到 M 的最大连续可贴出的邮资。 题目描述 例如&#xff0c;假设有 1 分和 3 分的邮票&#xff1b;你最多可以贴 5 张…