链接:https://www.nowcoder.com/acm/contest/118/F
来源:牛客网

题目描述

《扫雷》是一款大众类的益智小游戏,于1992年发行。游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。当某个位置为数字的时,代表它周围的八连通区域中有对应数量的雷。

kirai获取了简化版扫雷(没有标记雷的小旗)的后台数据(后台数据包括所有数字和雷的位置),转换为一个n*m(1≤n, m≤500)的矩阵并对格子类型做了如下标记:
雷被标记为'*';
点开的空白区域标记为'0';
未点开的空白区域标记为'.';
数字1~8代表周围有多少雷;
kirai非常笨,他希望你帮他完成这样的任务:
给定k(1≤k≤min(可扫位置数, 10))个位置坐标和扫雷游戏的后台数据,输出点开指定位置序列后游戏的结果,初始时游戏中没有点开任何位置。
注:数据保证扫雷过程中不会重复点击已扫位置。

输入描述:

输入样例有多组,全部是正整数。首先输入样例组数T(T≤10)。
接下来输入T组数,每组数据第一行包括四个正整数n,m,k(1≤n, m≤500, 1≤k≤min(可扫位置数, 10))分别表示地图的行、列数和即将点开的位置数。紧接着是一个n*m的矩阵,代表扫雷的后台数据,。
矩阵后是k个整数对x

i

, y

i

(1≤i≤k, 1≤x

i

≤n, 1≤y

i

≤m),表示依次点开的位置。

输出描述:

如果某一步踩到雷,输出"Game over in step x"(不包括引号",表示第x步踩中雷);未踩到雷则根据扫雷的游戏规则更新,并输出最后一步结束后显示给kirai的矩阵。

输入例子:
1
5 5 3
2*11*
*2111
22...
*1...
11...
1 1
3 3
1 2
输出例子:
Game over in step 3

-->

示例1

输入

1
5 5 3
2*11*
*2111
22...
*1...
11...
1 1
3 3
1 2

输出

Game over in step 3

说明

2....
.....
.....
.....
.....
2....
.2111
.2000
.1000
.1000
Game over in step 3
根据题意模拟,记得初始化
#include<cstdio>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<cmath>
using namespace std;
char mp[][];
char t[][];
bool vis[][];
int d[][]={{-,},{,},{,},{,-},{-,},{,-},{,},{-,-}};
int n,m,k;
void init() {
for(int i =; i<=n; i++) {
for(int j=; j<=m; j++) {
t[i][j]='.';
}
}
}
void dfs(int x,int y) {
t[x][y]='';
for(int i=; i<; i++) {
int nx=x+d[i][];
int ny=y+d[i][];
if(nx<||ny<||nx>n||ny>m) continue;
if(mp[nx][ny]=='*') continue;
if(!vis[nx][ny]&&mp[nx][ny]=='.') {
vis[nx][ny]=;
dfs(nx,ny);
} else if(mp[x][y]>=''&&mp[x][y]<='') {
t[nx][ny]=mp[nx][ny];
}
}
}
int main() {
int T;
scanf("%d",&T);
while(T--) { memset(vis,,sizeof(vis));
scanf("%d%d%d",&n,&m,&k);
init();
for(int i=; i<=n; i++) {
for(int j=; j<=m; j++) {
cin>>mp[i][j];
}
}
int flag=;
for(int i=; i<=k; i++) {
int x,y;
scanf("%d%d",&x,&y);
if(!flag) continue;
if(mp[x][y]=='*') {
flag=;
printf("Game over in step %d\n",i);
continue;
}
if(mp[x][y]=='.') {
if(vis[x][y]==) continue;
vis[x][y]=;
dfs(x,y);
} else if(mp[x][y]>=''&&mp[x][y]<='') {
t[x][y]=mp[x][y];
}
}
if(flag) {
for(int i=; i<=n; i++) {
for(int j=; j<=m; j++) {
printf("%c",t[i][j]);
}
printf("\n");
}
}
}
return ;
}

牛客~~扫雷~~~DFS+模拟的更多相关文章

  1. 牛客CSP-S提高模拟4 赛后总结

    前言 其实前面已经打了 3 场牛客 3 场计蒜客的比赛,都没有写总结,今天先提一下以前的情况 计蒜客 1 :0+0+0 = 0 (心态崩了,写挂了) 牛客 1: 0+0+0 = 0 (T1博弈论,T2 ...

  2. 牛客网_Wannafly模拟赛1

    A.矩阵 题目链接:https://www.nowcoder.com/acm/contest/submit/f8363c912a4c48a28b80f47e7102b6b8?ACMContestId= ...

  3. 10.6-10.7 牛客网NOIP模拟赛题解

    留个坑... upd:估计这个坑补不了了 如果还补不了就删了吧

  4. 牛客网Wannafly模拟赛

    A矩阵 时间限制:1秒 空间限制:131072K 题目描述 给出一个n * m的矩阵.让你从中发现一个最大的正方形.使得这样子的正方形在矩阵中出现了至少两次.输出最大正方形的边长. 输入描述: 第一行 ...

  5. 牛客小白月赛6C-桃花(DFS/BFS求树的直径)

    链接:https://www.nowcoder.com/acm/contest/136/C 来源:牛客网 桃花 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言 ...

  6. 牛客网-乌龟跑步-(四维dfs)

    链接:https://ac.nowcoder.com/acm/problem/15294来源:牛客网 题目描述 有一只乌龟,初始在0的位置向右跑. 这只乌龟会依次接到一串指令,指令T表示向后转,指令F ...

  7. 牛客练习赛31 D 神器大师泰兹瑞与威穆 STL,模拟 A

    牛客练习赛31 D 神器大师泰兹瑞与威穆 https://ac.nowcoder.com/acm/contest/218/D 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 26214 ...

  8. 牛客国庆集训day5 G 贵族用户 (模拟)

    链接:https://www.nowcoder.com/acm/contest/205/G来源:牛客网 题目描述 终于活成了自己讨厌的样子. 充钱能让你变得更强. 在暖婊这个游戏里面,如果你充了x元钱 ...

  9. 牛客小白月赛2 G 文 【模拟】

    链接:https://www.nowcoder.com/acm/contest/86/G来源:牛客网 题目描述 Sεlιнα(Selina) 开始了新一轮的男友海选.她要求她的男友要德智体美劳样样都全 ...

随机推荐

  1. js字符转数字

    js字符串转数字 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把值转换成浮点数.只 ...

  2. Java OOP——JAVA关键字与保留字说明及使用

    1.abstract abstract 关键字可以修改类或方法. abstract 类可以扩展(增加子类),但不能直接实例化. abstract 方法不在声明它的类中实现,但必须在某个子类中重写. - ...

  3. Apache Maven(二):构建生命周期

    Maven 约定的目录结构 我要遵循Maven已经约定好的目录结构,才能让maven在自动构建过程中找到对应的资源进行构建处理.以下是maven约定的目录结构: 项目名称 |-- pom.xml :M ...

  4. 操作 Java 数组的 12 个最佳方法

    1.  声明一个数组 Java代码: String[] aArray = new String[5]; String[] bArray = {"a","b",& ...

  5. sql语句(Oracle和sqlserver)

    查询表的首句:(Oracle) select * from (select a.*, rownum as rn from tab_name a order by col )where rn = 1 o ...

  6. VIM配置IDE

    转载于:https://blog.csdn.net/andre617/article/details/53496490#%E8%84%9A%E6%B3%A8 由于YCM需要vim支持python,需要 ...

  7. C# 在窗口绘制图形(打点、画圆、画线)

    需要包含命名空间 using System.Drawing; 画图前需要先创建画板 void Display() { Graphics g = this.CreateGraphics(); //创建画 ...

  8. [Hdu4825]Xor Sum(01字典树)

    Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Zeus 发起M次询问 ...

  9. 关于p标签的嵌套问题

    今天群里问了一个p的问题,初看我觉得恩这么简单我应该知道. 他代码如下: <!DOCTYPE HTML> <html> <head> <meta charse ...

  10. python基础实践(三)

    -*-列表是新手可直接使用的最强大的python功能之一,它融合了众多重要的编程概念.-*- # -*- coding:utf-8 -*-# Author:sweeping-monkQuestion_ ...