牛客~~扫雷~~~DFS+模拟
链接:https://www.nowcoder.com/acm/contest/118/F
来源:牛客网
题目描述
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
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+模拟的更多相关文章
- 牛客CSP-S提高模拟4 赛后总结
前言 其实前面已经打了 3 场牛客 3 场计蒜客的比赛,都没有写总结,今天先提一下以前的情况 计蒜客 1 :0+0+0 = 0 (心态崩了,写挂了) 牛客 1: 0+0+0 = 0 (T1博弈论,T2 ...
- 牛客网_Wannafly模拟赛1
A.矩阵 题目链接:https://www.nowcoder.com/acm/contest/submit/f8363c912a4c48a28b80f47e7102b6b8?ACMContestId= ...
- 10.6-10.7 牛客网NOIP模拟赛题解
留个坑... upd:估计这个坑补不了了 如果还补不了就删了吧
- 牛客网Wannafly模拟赛
A矩阵 时间限制:1秒 空间限制:131072K 题目描述 给出一个n * m的矩阵.让你从中发现一个最大的正方形.使得这样子的正方形在矩阵中出现了至少两次.输出最大正方形的边长. 输入描述: 第一行 ...
- 牛客小白月赛6C-桃花(DFS/BFS求树的直径)
链接:https://www.nowcoder.com/acm/contest/136/C 来源:牛客网 桃花 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言 ...
- 牛客网-乌龟跑步-(四维dfs)
链接:https://ac.nowcoder.com/acm/problem/15294来源:牛客网 题目描述 有一只乌龟,初始在0的位置向右跑. 这只乌龟会依次接到一串指令,指令T表示向后转,指令F ...
- 牛客练习赛31 D 神器大师泰兹瑞与威穆 STL,模拟 A
牛客练习赛31 D 神器大师泰兹瑞与威穆 https://ac.nowcoder.com/acm/contest/218/D 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 26214 ...
- 牛客国庆集训day5 G 贵族用户 (模拟)
链接:https://www.nowcoder.com/acm/contest/205/G来源:牛客网 题目描述 终于活成了自己讨厌的样子. 充钱能让你变得更强. 在暖婊这个游戏里面,如果你充了x元钱 ...
- 牛客小白月赛2 G 文 【模拟】
链接:https://www.nowcoder.com/acm/contest/86/G来源:牛客网 题目描述 Sεlιнα(Selina) 开始了新一轮的男友海选.她要求她的男友要德智体美劳样样都全 ...
随机推荐
- Linux终端显示控制字符
在Linux中, 我们时常要将一个命令的输出作为另外一个命令的输入进行下一步处理操作. 有时, 如果一个命令的输出中有不可见的控制字符时, 有可能会导致后续操作出错. 而这些控制字符很可能是不可打印的 ...
- PHP siege 压测 QPS大小
1.使用 PHP-FPM SOCKET的形式通讯 2.配置 PHP-FPM配置 [root@bogon php-fpm.d]# ls -al 总用量 drwxr-xr-x. root root 8月 ...
- JavaScript编码加密
网上看到的加密方法: JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,deco ...
- Ansible学习 Playbooks_1
Playbooks是Ansible中执行较复杂任务的一种的方式,Playbook由1个或多个play组成,语法格式是YAML,下面以一个简单的任务为例,开始我们的Playbook学习: 任务描述: 1 ...
- python 获取类中除内置方法外的所有方法名
#!/usr/bin/env python# !-*- coding:utf-8 -*- class Menu: def __init__(self): pass def updateProject( ...
- Codeforces146D 概率DP
Bag of mice The dragon and the princess are arguing about what to do on the New Year's Eve. The drag ...
- 9.2python操作redis
Redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorte ...
- android apk瘦身之 图片压缩 tinypng
参考地址: http://blog.csdn.net/jy692405180/article/details/52409369 http://www.tuicool.com/articles/BraI ...
- sprintf()函数使用异常
调试STM32F103,比如如下代码:使用springf函数,这个函数是把最后两个参数先格式化成字符串 ,输出到ERROR_STRING,如果他们合并的长度大于30会出现深情况? ] sprintf( ...
- Eclipse 创建 Java 接口---Eclipse教程第11课
打开新建 Java 接口向导 新建 Java 接口向导可以创建新的 Java 接口.打开向导的方式有: 点击 File 菜单并选择 New > Interface 在 Package Explo ...