十面埋伏

题目链接
经过多年的征战,牛牛在与牛可乐的对决渐渐处于下风,于是牛牛决定对牛可乐来一次大围剿。
战场可以看作一张 n∗m 的地图,牛可乐的士兵只能上下左右移动,不能斜着移动,牛牛决定挖一圈陷阱包围牛可乐的士兵。牛牛想知道包围牛可乐的士兵所需要的最少的陷阱数量是多少(划掉,具体请看update),但是牛牛并不会排兵布阵,于是只能求助于你了。
保证地图的边界处不会有士兵.
保证牛可乐的士兵是连通的
要求牛可乐使用的陷阱构成的包围圈与牛可乐的士兵之间要求是紧密接触的

输入描述:

第一行输入两个整数 n 和 m,表示地图的大小
下面 n 行每行 m 个字符,. 表示空地,# 表示士兵。
保证输出的字符串只包含 . 和 #

输出描述:

输出挖完陷阱后的地图,陷阱用 ∗ 来表示.

输入

6 5
.....
.###.
.#.#.
.###.
..##.
.....

输出

.***.
*###*
*#.#*
*###*
.*##*
..**.

输入

10 10
..........
..######..
.#######..
.#######..
.##.###...
.##..##...
.....##...
..........
..........
..........

输出

..******..
.*######*.
*#######*.
*#######*.
*##*###*..
*##**##*..
.**.*##*..
.....**...
..........
..........

备注:
1≤n,m≤500

算法分析

DFS的题目,不一样的就是需要标记记录,我们遍历所有在外面的空地.因为士兵内部的空地是不需要管的,将外面的空地标记,之后遍历地图,如果这个空地在外面(就是被标记了)然后四个方向其中一个方向上有小兵,我们就将这个点变为陷阱点.还有一种遍历士兵,然后在士兵的四个方向找被标记的空地,然后将空地变为标记点也还可以的.

代码实现

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=505;
char map[maxn][maxn];
bool vis[maxn][maxn];
int n,m;
int dx[4]={0,1,0,-1};
int dy[4]={-1,0,1,0};
bool pd(int x,int y)
{if(x<1||x>n||y<1||y>m||vis[x][y]||map[x][y]=='#')return false;return true;
}
void dfs(int x,int y)
{vis[x][y]=1;for(int i=0;i<4;i++){int nx=x+dx[i];int ny=y+dy[i];if(pd(nx,ny)){dfs(nx,ny);}}
}
int main()
{cin>>n>>m;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin>>map[i][j];dfs(1,1);for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(map[i][j]=='.'){for(int q=0;q<4;q++){int nx=i+dx[q];int ny=j+dy[q];if(map[nx][ny]=='#'&&vis[i][j]){map[i][j]='*';}}}cout<<map[i][j];}cout<<endl;}
}

十面埋伏(DFS,标记)相关推荐

  1. LightOJ 1074 Extended Traffic(spfa+dfs标记负环上的点)

    题目链接:https://cn.vjudge.net/contest/189021#problem/O 题目大意:有n个站点,每个站点都有一个busyness,从站点A到站点B的花费为(busynes ...

  2. C.十面埋伏(DFS连通块)

    C.十面埋伏(DFS&连通块) 题目传送门 题意:将"#"图案用星号围一圈并输出图. 思路:显然从外围DFS,判断一下四周有无#即可. AC代码: #include< ...

  3. CodeForces999E 双dfs // 标记覆盖 // tarjan缩点

    http://codeforces.com/problemset/problem/999/E 题意 有向图    给你n个点,m条边,以及一个初始点s,问你至少还需要增加多少条边,使得初始点s与剩下其 ...

  4. 岛屿问题,矩阵:DFS+标记剪枝+回溯

    深度优先搜索: 可以理解为暴力法遍历矩阵中所有字符串可能性.DFS 通过递归,先朝一个方向搜到底,再回溯至上个节点,沿另一个方向搜索,以此类推. 剪枝: 在搜索中,遇到 这条路不可能和目标字符串匹配成 ...

  5. Educational Codeforces Round 5(C. The Labyrinth)【DFS标记父节点】

    链接 分析 这题可以使用DFS来解决,如果说从星号开始模拟出发DFS,时间复杂度可能会很坏.例如 .*... .*.*. .*.*. ...*. 这"."蛇形走位的话,对于每个星都 ...

  6. 牛客网 十面埋伏 dfs

    题目链接 思路:将'#'外围的'.'先标记,然后再去改变'#'周边的有标记的'.'成'*'. #include<bits/stdc++.h> using namespace std; in ...

  7. 洛谷P1979 华容道(dfs)

    由于不太会打bfs,这题用的dfs. 通过这道题还是学到了蛮多的东西的. 首先,瞎打一气(dfs + 标记走过的点)40分. 代码如下: #include<iostream> #inclu ...

  8. S - Extended Traffic LightOJ - 1074

    S - Extended Traffic LightOJ - 1074 题意: 每个点有一个点权,边权为边的(终点点权-起点点权)的立方, 求从 1 出发的最短路 思路一:DJ,太简单了 结果一发WA ...

  9. 图上的文章(割点和桥)

    题外话: 今天不想码代码了,知识普及的一天 注意:以下内容是在无向图的基础上 无向图的割点 很久之前就知道这些名词 今天终于可以来填坑了... 如果将连通图G中的某个点及和这个点相关的边删除后,将使连 ...

最新文章

  1. 【组队学习】【31期】LeetCode 刷题
  2. Swift 烧脑体操(二) - 函数的参数
  3. C++纯虚函数和抽象类
  4. 【DotNetMLLearn】.NET Core 人工智能系列-.NET Interactive环境介绍
  5. WebAssembly增加Go语言绑定
  6. 基于线性调频(LFM)信号分数阶傅里叶变换的多径时延估计
  7. 错误: 在类中找不到 main 方法, 请将 main 方法定义为:public static void main(String[] args)否则 JavaFX 应用程序类必须扩展javafx.ap
  8. 1-3.Win10系统利用Pycharm社区版安装Django搭建一个简单Python Web项目的步骤之三
  9. SAP License:今天你‘牺牲’了吗?
  10. 全球首发!惯性导航导论(剑桥大学)第七部分
  11. Atitit 现代信息检索 Atitit 重要章节 息检索建模 检索评价 第8章 文本分类 Line 210: 第9章 索引和搜索 第11章 Web检索 第13章 结构化文本检索 目录 L
  12. jsp引进的js 显示404_【梅园大讲堂微课堂】Get超级大招!上海人才引进云申报权威解读来了...
  13. 阿里云云计算 3 阿里云产品全家福
  14. 考研-高等数学(数学一)目录整理
  15. leetcode链表刷题 python
  16. Java经典问题算法大全
  17. Android 出海 Admob 踩坑
  18. warning: control reaches end of non-void function [-Wreturn-type]
  19. 惊呆!200行代码就能实现的隐身术你见过么?
  20. html+圆角六边形,CSS3 圆角六边形

热门文章

  1. Hilt 介绍 | MAD Skills
  2. Floodlight学习笔记--LinkCost
  3. 命运、态度以及勇往直前
  4. vooc充电原理_OPPO VOOC充电技术详解
  5. 没希望的外贸客户被我拉了回来,再一次下单!
  6. Ubuntu14.04 科学计算包blas、lapack的安装及其使用
  7. python天天向上的力量程序代码_天天向上的力量python(举一反三)
  8. Java发展方向路线图
  9. C语言——feof函数
  10. JAVA模拟WebSocket客户端,支持wss ssl证书