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的更多相关文章

  1. FZU1920 Left Mouse Button(dfs)

     Problem 1920 Left Mouse Button Accept: 385    Submit: 719 Time Limit: 1000 mSec    Memory Limit : 3 ...

  2. Left Mouse Button (bfs)

    Mine sweeper is a very popular small game in Windows operating system. The object of the game is to ...

  3. FZU 1920 Left Mouse Button 简单搜索

    题意就是扫雷 问最少多少次可以把图点开…… 思路也很明显 就是先把所有的标记一遍 就当所有的都要点…… 录入图…… 所有雷都不标记…… 之后呢 遍历图…… 然后碰到0就搜索一圈 碰到数字就标记…… 不 ...

  4. wx.button

    wx.Button A button is a control that contains a text string, and is one of the most common elements ...

  5. jQuery中有关mouse的事件--mousedown/up/enter/leave/over/out----2017-05-10

    mousedown:鼠标按下才发生 mouseup:鼠标按下松开时才发生 mouseenter和mouseleave效果和mouseover mouseout效果差不多:但存在区别,区别见代码解析: ...

  6. Javascript Madness: Mouse Events

    http://unixpapa.com/js/mouse.html Javascript Madness: Mouse Events Jan WolterAug 12, 2011 Note: I ha ...

  7. js & listen mouse click

    js & listen mouse click how to listen mouse click in js https://www.kirupa.com/html5/mouse_event ...

  8. Drag & drop a button widget

    In the following example, we will demonstrate how to drag & drop a button widget. #!/usr/bin/pyt ...

  9. [转]dojo/mouse

    dojo/mouse Authors:Kris Zyp Project owner:Kris Zyp since:1.7.0 Contents Usage enter leave mouseButto ...

随机推荐

  1. QT QObject::connect函数的学习

      从Qobject(QObject.h)源码中可以看到QObject::connect的定义是这样的: static bool connect(const QObject *sender, cons ...

  2. 10.13 noip模拟试题

    Porble 1时间与空间之旅(tstrip.*) 题目描述 公元22××年,宇宙中最普遍的交通工具是spaceship.spaceship的出现使得星系之间的联系变得更为紧密,所以spaceship ...

  3. 10.3 noip模拟试题

    希望[题目描述]网页浏览器者有后退与前进按钮,一种实现这两个功能的方式是用两个栈,“前进栈”.“后退栈”.这里你需要实现以下几个功能:BACK: 如果“后退栈”为空则忽略此命令. 否则将当前两面压入“ ...

  4. 9.23 noip模拟试题

      Problem 1 抓牛(catchcow.cpp/c/pas) [题目描述] 农夫约翰被通知,他的一只奶牛逃逸了!所以他决定,马上出发,尽快把那只奶牛抓回来. 他们都站在数轴上.约翰在N(O≤N ...

  5. (转)function($){}(window.jQuery) 是什么意思?

    function(){}(); (function(){})(); 这两个是self-invoking anonymous 自调匿名函数,用这类的方法,能强制使匿名函数成为表达式,把不合法变成合法. ...

  6. Android 使用弹出对话框,报Unable to add window错误

    今天在使用Android弹出对话框的时候,报了一个unable to add window错误,我的代码如下 new AlertDialog.Builder(getApplicationContext ...

  7. Android WebView和JavaScript交互

    JavaScript在现在的网页设计中用得很多,Android 的WebView可以载入网页,WebView也设计了与JavaScript通信的桥梁.这篇主要介绍一下WebViewk控件如何和Java ...

  8. [转帖]FPGA--Vivado

    来源:http://home.eeworld.com.cn/my/space-uid-639749-blogid-267593.html 一般的,在Verilog中最常用的编码方式有二进制编码(Bin ...

  9. 推荐Asp.net WebApi入门教程

    Web API 强势入门指南; Web API 入门指南 - 闲话安全; 实例快速上手 -ASP.NET 4.5新特性WebAPI从入门到精通; Asp.net WebApi 项目示例(增删改查).

  10. WampServer修改端口及菜单Localhost

    一.修改Apache端口 1.在界面中选Apache,弹出隐藏菜单选项,打开配置文件httpd.conf: 2.找到 Listen 80: 3.将 80 改成 8080(当然自己也可以设定别的不使用的 ...