洛谷P4961 小埋与扫雷
题目背景
小埋总是在家中打游戏,一天,她突然想玩Windows自带的扫雷,在一旁的哥哥看见了,想起了自己小时候信息课在机房玩扫雷的日子,便兴致勃勃地开始教小埋扫雷。然而,小埋还是不明白 \mathrm{3bv}3bv(Bechtel's Board Benchmark Value,每局将所有非雷的方块点开所需最少左键点击数,参见扫雷网的教程 )怎么算,于是她找到了你。
题目描述
小埋会告诉你一盘扫雷,用一个 n\times mn×m 的矩阵表示,11 是雷 ,00 不是雷,请你告诉她这盘扫雷的 \mathrm{3bv}3bv 。
周围八格没有“雷”且自身不是“雷”的方格称为“空格”,周围八格有“雷”且自身不是“雷”的方格称为“数字”,由“空格”组成的八连通块称为一个“空”。\mathrm{3bv}=\3bv= 周围八格没有“空格”的“数字”个数++“空"的个数。
如果看不懂上面的计算方式,可以看题目背景中给出的教程,或者看下面的样例解释。
注:八连通
输入格式
第一行有两个整数 nn 和 mm,代表这盘扫雷是一个 n \times mn×m 的矩阵。
后面的 nn 行每行有 mm 个整数,表示这个矩阵,每个数字为 00 或 11,11 代表是雷,00 代表不是雷。
输出格式
一个整数,代表这盘扫雷的 \mathrm{3bv}3bv 。
输入输出样例
输入 #1复制
8 8 0 0 0 1 1 0 0 0 1 0 0 1 0 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
输出 #1复制
13
说明/提示
1\le n,\ m\le 10001≤n, m≤1000
样例解释
上代码:
#include<bits/stdc++.h>//万能大法好
using namespace std;
int a[1000][1000],m,n;//a是雷图,mn是边界
bool booka[1000][1000];//联通快时判重
int xz[8]={-1,-1,-1,0,0,1,1,1},yz[8]={-1,0,1,-1,1,-1,0,1};//八联通!!!
int bv3,lt; //第一个3bv,lt是联通快的数量
void dfs(int x,int y)//联通快
{for(int i=0;i<8;i++){int xx=x+xz[i],yy=y+yz[i];if(xx>=0&&xx<n&&yy>=0&&yy<m&&a[xx][yy]==0&&!booka[xx][yy])//判断边界与重复{booka[xx][yy]=true;//打标记dfs(xx,yy);}}
}
void b(int x,int y)//初始化雷图用的,把格子里填数字
{for(int p=0;p<8;p++){int i=x+xz[p],j=y+yz[p];if(i>=0&&i<n&&j>=0&&j<m&&a[i][j]!=-1) a[i][j]++;}
}
int iff(int x,int y)//判断周围八格是否有空格
{for(int i=0;i<8;i++){int xx=x+xz[i];int yy=y+yz[i];if(xx>=0&&xx<n&&yy>=0&&yy<m&&a[xx][yy]==0)//判空格return 0;}return 1;
}
int main()
{cin>>n>>m;for(int i=0;i<n;i++){for(int j=0;j<m;j++){cin>>a[i][j];if(a[i][j]==1) a[i][j]=-1;//读入,把雷标记为-1,便于区分数字为 1的无雷格}}for(int i=0;i<n;i++)for(int j=0;j<m;j++)if(a[i][j]==-1)b(i,j);//把有雷格周围八格数字自增for(int i=0;i<n;i++)for(int j=0;j<m;j++)if(a[i][j]!=0&&a[i][j]!=-1&&iff(i,j))bv3++;//周围八格无雷的数字的数量for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(a[i][j]==0&&!booka[i][j]){lt++;//联通快数量dfs(i,j);}}}bv3+=lt;cout<<bv3;//输出答案return 0;
}
洛谷P4961 小埋与扫雷相关推荐
- (伟大的dfs)洛谷P4961 小埋与扫雷
小埋总是在家中打游戏,一天,她突然想玩Windows自带的扫雷,在一旁的哥哥看见了,想起了自己小时候信息课在机房玩扫雷的日子,便兴致勃勃地开始教小埋扫雷.然而,小埋还是不明白 \mathrm{3bv} ...
- 题解:P4961 小埋与扫雷
题目链接: P4961 小埋与扫雷 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 解题思路: 周围八格没有"空格"的"数字"个数求法:枚举所 ...
- P4961 小埋与扫雷
P4961 小埋与扫雷 题目背景 小埋总是在家中打游戏,一天,她突然想玩Windows自带的扫雷,在一旁的哥哥看见了,想起了自己小时候信息课在机房玩扫雷的日子,便兴致勃勃地开始教小埋扫雷.然而,小埋还 ...
- P4961 小埋与扫雷【dfs】
小埋总是在家中打游戏,一天,她突然想玩Windows自带的扫雷,在一旁的哥哥看见了,想起了自己小时候信息课在机房玩扫雷的日子,便兴致勃勃地开始教小埋扫雷.然而,小埋还是不明白 3bv(Bechtel' ...
- luogu P4961 小埋与扫雷
题目背景 小埋总是在家中打游戏,一天,她突然想玩Windows自带的扫雷,在一旁的哥哥看见了,想起了自己小时候信息课在机房玩扫雷的日子,便兴致勃勃地开始教小埋扫雷.然而,小埋还是不明白 每局将所有非雷 ...
- 洛谷 P4430 小猴打架
洛谷 P4430 小猴打架 题目描述 一开始森林里面有N只互不相识的小猴子,它们经常打架,但打架的双方都必须不是好朋友.每次打完架后,打架的双方以及它们的好朋友就会互相认识,成为好朋友.经过N-1次打 ...
- 信息学奥赛一本通 1970:【15NOIP普及组】扫雷游戏 | OpenJudge NOI 1.8 14:扫雷游戏地雷数计算 | 洛谷 P2670 [NOIP2015 普及组] 扫雷游戏
[题目链接] ybt 1970:[15NOIP普及组]扫雷游戏 OpenJudge NOI 1.8 14:扫雷游戏地雷数计算 洛谷 P2670 [NOIP2015 普及组] 扫雷游戏 [题目考点] 1 ...
- 2017提高组D1T1 洛谷P3951 小凯的疑惑
洛谷P3951 小凯的疑惑 原题 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想 ...
- 洛谷 P2186 小Z的栈函数
洛谷 P2186 小Z的栈函数 题目 题目描述 小Z最近发现了一个神奇的机器,这个机器的所有操作都是通过维护一个栈来完成的,它支持如下11个操作: NUM X:栈顶放入X. POP:抛弃栈顶元素. I ...
最新文章
- python函数定义中参数列表里的参数是_详解Python函数中参数带星号是什么意思
- JAVA入门到精通-网络编程补充和QQ案例
- python打开文件并读取2进制_在Python中,哪些文件可以读取为文本,哪些文件可以读取为二进制?...
- 中国石油计算机第二次在线作业,中国石油大学(北京)计算机应用基础第二次在线作业1教程.docx...
- poj3254 Corn Fields
- 怎么运行aws的示例程序_使Spring Boot应用程序在AWS上无服务器运行
- 4K视频直播与点播系统的搭建与体验
- 史上最全的键盘快捷键
- 【java】switch的用法介绍
- 利用redis做次数限制的小结
- 【读书笔记】目标是什么
- 【缓存】缓存更新策略
- Elite教程系列(一):快速上手
- Go1.19 那些事:国产芯片、内存模型等新特性,你知道多少?
- 站长平台之360推送工具
- 给电脑重装系统后Win11如何重置记事本?
- 手机App开发行业前景怎么样?
- 架构师之路(3)---架构师的职责
- 创业阶段如何找客户_创业者如何找客户群
- 停车收费系统服务器,无人值守停车场自动收费 车牌识别微信支付系统介绍