Left Mouse Button
FZU:http://acm.fzu.edu.cn/problem.php?pid=1920
题意:叫你玩扫雷游戏,已经告诉你地雷的位置了,问你最少点几次鼠标左键可以赢这盘扫雷
题解:直接DFS,(注意这里是8个方向搜索不是4个方向),然后把0周围的不是雷的格子置0,然后统计不是0也不是雷的格子数量,然后加上之前DFS的数量就是答案。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
char mp[][];
int n;
int ans,px[],py[];
int top,s1[],s2[],num;
bool visit[][];
void DFS(int x,int y){//dfs寻找连通0的区域有多少个
int dir[][]={{,},{-,},{,},{,-},{-,-},{-,},{,-},{,}};
for(int i=;i<;i++){
int xx=x+dir[i][];
int yy=y+dir[i][];
if(xx>=&&xx<=n&&yy>=&&yy<=n){
if(mp[xx][yy]==''&&visit[xx][yy]==){
visit[xx][yy]=;
DFS(xx,yy);
}
}
}
}
int main(){
int test;
scanf("%d",&test);
int tt=;
while(test--){
ans=;
scanf("%d",&n);
memset(mp,-,sizeof(mp));
top=;num=;
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
cin>>mp[i][j];
if(mp[i][j]==''){
px[++top]=i; py[top]=j;
s1[++num]=i; s2[num]=j;
}
}
}
memset(visit,,sizeof(visit));
while(top>=){
int a=px[top];
int b=py[top--];
if(!visit[a][b]){
visit[a][b]=;
ans++;
DFS(a,b);
}
}
while(num>=){//把0周围的非雷格子至晨0
int a=s1[num];
int b=s2[num--];
if(a>=&&mp[a-][b]!=''&&mp[a-][b]!='@')
mp[a-][b]='';
if(a<n&&mp[a+][b]!=''&&mp[a+][b]!='@')
mp[a+][b]='';
if(b>=&&mp[a][b-]!=''&&mp[a][b-]!='@')
mp[a][b-]='';
if(b<n&&mp[a][b+]!=''&&mp[a][b+]!='@')
mp[a][b+]='';
if(a>=&&b>=&&mp[a-][b-]!=''&&mp[a-][b-]!='@')
mp[a-][b-]='';
if(a>=&&b<n&&mp[a-][b+]!=''&&mp[a-][b+]!='@')
mp[a-][b+]='';
if(a<n&&b>=&&mp[a+][b-]!=''&&mp[a+][b-]!='@')
mp[a+][b-]='';
if(a<n&&b<n&&mp[a+][b+]!=''&&mp[a+][b+]!='@')
mp[a+][b+]='';
}
for(int i=;i<=n;i++){//统计剩余需要点击的格子
for(int j=;j<=n;j++){
if(mp[i][j]!=''&&mp[i][j]!='@')
ans++;
}
}
printf("Case %d: %d\n",tt++,ans);
}
}
Left Mouse Button的更多相关文章
- FZU1920 Left Mouse Button(dfs)
Problem 1920 Left Mouse Button Accept: 385 Submit: 719 Time Limit: 1000 mSec Memory Limit : 3 ...
- Left Mouse Button (bfs)
Mine sweeper is a very popular small game in Windows operating system. The object of the game is to ...
- FZU 1920 Left Mouse Button 简单搜索
题意就是扫雷 问最少多少次可以把图点开…… 思路也很明显 就是先把所有的标记一遍 就当所有的都要点…… 录入图…… 所有雷都不标记…… 之后呢 遍历图…… 然后碰到0就搜索一圈 碰到数字就标记…… 不 ...
- wx.button
wx.Button A button is a control that contains a text string, and is one of the most common elements ...
- jQuery中有关mouse的事件--mousedown/up/enter/leave/over/out----2017-05-10
mousedown:鼠标按下才发生 mouseup:鼠标按下松开时才发生 mouseenter和mouseleave效果和mouseover mouseout效果差不多:但存在区别,区别见代码解析: ...
- Javascript Madness: Mouse Events
http://unixpapa.com/js/mouse.html Javascript Madness: Mouse Events Jan WolterAug 12, 2011 Note: I ha ...
- js & listen mouse click
js & listen mouse click how to listen mouse click in js https://www.kirupa.com/html5/mouse_event ...
- Drag & drop a button widget
In the following example, we will demonstrate how to drag & drop a button widget. #!/usr/bin/pyt ...
- [转]dojo/mouse
dojo/mouse Authors:Kris Zyp Project owner:Kris Zyp since:1.7.0 Contents Usage enter leave mouseButto ...
随机推荐
- Seeking USB Serial Com Port in Windows Automatically : via PID VID
After you read previous article, you might know how to operate a com port in Windows. But that ex ...
- docker-compose 工具安装
centos 7 安装 之前测试过相关安装方法 pip python 安装不行 还是用下面这个办法搞定 curl -L https://github.com/docker/compose/releas ...
- oracle 常用博客网址
使用oradebug修改数据库scn – 提供专业ORACLE技术咨询和支持@Phone13429648788 - 惜分飞 Solaris上使用DTrace进行动态跟踪 老熊的三分地-Oracle及数 ...
- Qt 学习之路:坐标系统
在经历过实际操作,以及前面一节中我们见到的那个translate()函数之后,我们可以详细了解下 Qt 的坐标系统了.泛泛而谈坐标系统,有时候会觉得枯燥无味,难以理解,好在现在我们已经有了基础. 坐标 ...
- 自己做的萌萌哒的js宠物挂件~
OwO萌物v1.1 类似wp伪春菜,但纯js不用后端,且可定制程度非常高~,3个人格示例,需要的童鞋自提 仙六 - 越祈 作者:正逍遥0716 2016/5/15 CLANNAD - 藤林杏 作者:正 ...
- unity介绍
- ubuntu下的openfire安装、配置、运行
openfire服务器 Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议.您可以使用它轻易的构建高效率的即时通信服务器.Op ...
- Jquery方法load之后导致js失效解决方法
Jquery方法load之后导致js失效解决方法 >>>>>>>>>>>>>>>>>>> ...
- 11.2 morning
noip模拟题day1——棋盘上的问题 day1模拟题 By FancyCoder总览(Overview)注意事项:共3道题目,时间2.5小时.Pascal选手允许使用math库和ansistring ...
- 15、SQL Server 触发器
SQL Server 触发器 触发器是一种特殊的存储过程,只有当试图用数据操作语言DML来修改数据时才会触发,DML包含对视图和表的增.删.改. 触发器分为DML触发器和DDL触发器,其中DML触发器 ...