17-比赛2 C - Maze (dfs)

 

Pavel loves grid mazes. A grid maze is an n × m rectangle maze where each cell is either empty, or is a wall. You can go from one cell to another only if both cells are empty and have a common side.

Pavel drew a grid maze with all empty cells forming a connected area. That is, you can go from any empty cell to any other one. Pavel doesn't like it when his maze has too little walls. He wants to turn exactly k empty cells into walls so that all the remaining cells still formed a connected area. Help him.

Input

The first line contains three integers nmk (1 ≤ n, m ≤ 500, 0 ≤ k < s), where nand m are the maze's height and width, correspondingly, k is the number of walls Pavel wants to add and letter s represents the number of empty cells in the original maze.

Each of the next n lines contains m characters. They describe the original maze. If a character on a line equals ".", then the corresponding cell is empty and if the character equals "#", then the cell is a wall.

Output

Print n lines containing m characters each: the new maze that fits Pavel's requirements. Mark the empty cells that you transformed into walls as "X", the other cells must be left without changes (that is, "." and "#").

It is guaranteed that a solution exists. If there are multiple solutions you can output any of them.

Examples

Input
3 4 2
#..#
..#.
#...
Output
#.X#
X.#.
#...
Input
5 4 5
#...
#.#.
.#..
...#
.#.#
Output
#XXX
#X#.
X#..
...#
.#.#

题意:
插入 k 个 X 且保持所有的 '.' 保持贯通
====================================================================================================================================================
怎么样才能使插入的 X 没有阻断路的连通,,想一想DFS,不撞南墙不回头的理论,只要沿着一个点一路走到底,直到不能走为止,那么这个末端放上X一定不会阻断其它'.'的连贯
如果所有末端 插入完毕之后,还有X没有放入,那么末端之后紧挨着的点就变成了末端,根据DFS走到末端后会原路返回,那么剩下的X跟着原路返回时插入就行了。
====================================================================================================================================================
代码:
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 char Map[510][510];
 4 bool book[510][510];
 5 int n,m,k;
 6 void dfs(int x,int y)
 7 {
 8     if(x<0||x>=n||y<0||y>=m) return;
 9     if(Map[x][y]!='.'||book[x][y]==1) return ;
10     book[x][y]=1;
11     for(int i=1;i<=4;i++)
12     {   //四个方向
13         if(i==1)  dfs(x+1,y);
14         if(i==2)  dfs(x-1,y);
15         if(i==3)  dfs(x,y+1);
16         if(i==4)  dfs(x,y-1);
17     }
18     //当遍历到底了之后,即循环了四次无法继续走下去时
19     if(k!=0)
20         Map[x][y]='X',k--;
21 }
22 int main()
23 {
24       scanf("%d%d%d",&n,&m,&k);
25         for(int i=0;i<n;++i)
26             scanf("%s",Map[i]);
27 
28         for(int i=0;i<n;++i)
29             {
30                 for(int j=0;j<m;j++)
31                 {
32                     dfs(i,j);
33                     if(k==0) break;
34                 }
35                 if(k==0) break;
36             }
37         for(int i=0;i<n;i++)
38             puts(Map[i]);
39     return 0;
40 }

转载于:https://www.cnblogs.com/darkboy/p/9415934.html

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

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

相关文章

html div 知识点,HTML知识点总结之div、section标签

div元素div是块级元素&#xff0c;相当于一个容器&#xff0c;在语义上不代表任何特定类型的内容。主要用作大的框架布局&#xff0c;也就是说网页的骨架主要通过div来架设的&#xff0c;而网页的血肉则是有span、p或者ul等元素完成。section元素标签是HTML5新增的语义化标签&a…

我们的大脑,足以理解大脑本身吗?

来源&#xff1a; 利维坦树突&#xff08;红色&#xff09;神经元的分支过程&#xff0c;接收突触信息的突出棘的渲染&#xff0c;以及来自小鼠大脑皮层的饱和重建&#xff08;多色圆柱体&#xff09;。© Lichtman Lab at Harvard University利维坦按&#xff1a;关于大脑…

Leetcode--17.电话号码的字母组合

给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例: 输入&#xff1a;"23" 输出&#xff1a;["ad", "ae", "af…

博弈论模型总结

博弈论五大模型 前四大模型的深入理解 Bash博弈模型 有一堆数量为n的石头&#xff0c;双方轮流每次从堆中取至少1个石头最多m个石头&#xff0c;谁先取完谁赢。 设存在整数k和r使方程**nk*(m1)r**成立,当r0时先手必败&#xff0c;否则先手必赢。 结论&#xff1a;n%(m1) 0, 先…

安全技术可以采用计算机安全,2017年计算机三级《信息安全技术》习题

2017年计算机三级《信息安全技术》习题信息安全技术主要培养熟练掌握网络设备的安装、管理和维护&#xff0c;能分析企业网络和信息系统安全漏洞、及时解决网络安全问题&#xff0c;并能够根据企事业单位业务特点设计制作安全的电子商务/政务网站的专业人员。以下是小编整理的2…

福布斯:14位技术专家预测,未来哪些行业将被AI颠覆?

来源&#xff1a;Forbes转自&#xff1a;新智元未来&#xff0c;哪些行业将从人工智能中受益&#xff1f;14位技术专家对哪些行业和部门最终将从AI中受益最大进行了预测。哪些行业将受益于AI&#xff1f;目前&#xff0c;人工智能和机器学习已进入许多不同的行业&#xff0c;改…

P3195 [HNOI2008]玩具装箱TOY

P3195 [HNOI2008]玩具装箱TOY 题目描述 P教授要去看奥运&#xff0c;但是他舍不下他的玩具&#xff0c;于是他决定把所有的玩具运到北京。他使用自己的压缩器进行压缩&#xff0c;其可以将任意物品变成一堆&#xff0c;再放到一种特殊的一维容器中。P教授有编号为1...N的N件玩具…

Leetcode--671. 合并二叉树

给定两个二叉树&#xff0c;想象当你将它们中的一个覆盖到另一个上时&#xff0c;两个二叉树的一些节点便会重叠。 你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠&#xff0c;那么将他们的值相加作为节点合并后的新值&#xff0c;否则不为 NULL 的节点将直…

吕述望 计算机网络专家,特稿: 中科院吕述望教授:互联网名不符实

国际中华智慧学会创新智慧研究通讯编号&#xff1a;YT-2012-007发布日期&#xff1a;2012年8月28日吕述望教授认为中国互联网名不符实中国香港讯&#xff1a;月前&#xff0c;中国工信部部长隆重宣布&#xff0c;将加快面向全新框架未来互联网的技术研发前沿布局&#xff0c;力…

打开AI芯片的“万能钥匙”

来源&#xff1a;雷锋网 作者&#xff1a;包永刚雷锋网按&#xff0c;新推出的AI芯片因架构的独特性和软件的易用性增加了客户尝试和迁移的成本&#xff0c;因此&#xff0c;软件成为了能否快速、低成本迁移的关键。现在普遍的做法是在TensorFlow写一些后端集成新硬件&#xff…

python2.7 threading RLock/Condition文档翻译 (RLock/Condition详解)

RLock Objects 可重入锁是一个同步原语&#xff0c;它可以被同一个线程多次获取。在内部&#xff0c;除了原始锁使用的锁定/解锁状态之外&#xff0c;它还使用“线程拥有”和“递归级别”的概念。在锁定状态下&#xff0c;某些线程拥有锁&#xff1b;在未锁定状态下&#xff0c…

Leetcode--33. 搜索旋转排序数组

假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如&#xff0c;数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 搜索一个给定的目标值&#xff0c;如果数组中存在这个目标值&#xff0c;则返回它的索引&#xff0c;否则返回 -1 。 你可以假设数组中不存在…

北理计算机教案,北理工版三年级信息技术教案重点.docx

第1单元 初识神奇计算机第1课 神奇电子计算机【教学目的和要求】1、学生了解计算机组成各部分的名称和作用。2、学生知道什么是计算机软件&#xff0c;了解计算机软件的作用。3、学生了解计算机处理信息的过程。4、学会正确启动与关闭计算机。【教学重点】教学难点&#xff1a;…

Leetcode--162. 寻找峰值

峰值元素是指其值大于左右相邻值的元素。 给定一个输入数组 nums&#xff0c;其中 nums[i] ≠ nums[i1]&#xff0c;找到峰值元素并返回其索引。 数组可能包含多个峰值&#xff0c;在这种情况下&#xff0c;返回任何一个峰值所在位置即可。 你可以假设 nums[-1] nums[n] -…

计算机发展历程按什么划分,计算机的发展阶段是按什么划分的

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。计算机的发展阶段是按电子元件划分的&#xff0c;具体阶段如下:1、第1代为电子管数字机( 1946到1958年)。硬件方面,逻辑元件采用的是真空电子管&#xff0c;主存储器采用汞延迟线、阴…

因果推理、正则化上榜:权威专家盘点过去50年最重要的统计学思想

来源&#xff1a;机器学习研究组订阅在日常生活中&#xff0c;统计学无处不在&#xff0c;每个人、每件事似乎都可以使用统计数据加以说明。随着人类迈入大数据时代&#xff0c;统计学在方方面面更是发挥了不可或缺的作用。统计学思想&#xff0c;就是在统计实际工作、统计学理…

Nginx正向与反向代理

Nginx 主要用于反向代理与负载均衡 什么是代理服务器&#xff08;Proxy Serve&#xff09;&#xff1f; 提供代理服务的电脑系统或其它类型的网络终端,代替网络用户去取得网络信息。 为什么使用代理服务器&#xff1f; 提高访问速度 由于目标主机返回的数据会存放在代理服务…

计算机组成原理延迟时间ty,计算机组成原理第6章_5运算方法.ppt

文档介绍&#xff1a;6.5 算术逻辑单元一、ALU 电路四位 ALU 74181M 0 算术运算M 1 逻辑运算S3 ~ S0 不同取值,可做不同运算ALUAiBiFi…SiM位片式运算器4位双极型位片式运算器AM2901,它将ALU、通用寄存器组、多路开关、移位器等逻辑构件集成在一个芯片内。通用寄存器寄存器写…

Leetcode--172. 阶乘后的零

给定一个整数 n&#xff0c;返回 n! 结果尾数中零的数量。 示例 1: 输入: 3 输出: 0 解释: 3! 6, 尾数中没有零。 示例 2: 输入: 5 输出: 1 解释: 5! 120, 尾数中有 1 个零. 说明: 你算法的时间复杂度应为 O(log n) 。 思路&#xff1a; 能出现零的因子里面一定出现2&am…

生命起源的奥秘:分子生物学对生命起源研究

来源&#xff1a; 科学技术哲学1993年加州大学柏克利分校的詹腓力教授邀请了一批科学家、哲学家到加州中部的一个海滨小镇相聚。这些学者来自著名的学术中心&#xff0c;包括剑桥、慕尼黑、芝加哥大学等学府&#xff0c;他们是来质疑一个统治了科学界长达150年的学说。保罗.尼尔…