Left Mouse Button
来源:互联网 发布:linux 高性能c日志库 编辑:程序博客网 时间:2024/04/25 20:34
and mark them out. You mark them by clicking your right mouse button. Then you will place a little flag where you think
the mine is. You click your left mouse button to claim a square as not being a mine. If this square is really a mine, it
explodes, and you lose. Otherwise, there are two cases. In the first case, a little colorednumbers, ranging from 1 to 8,
will display on the corresponding square. The number tells you how many mines areadjacent to the square. For example
, if you left-clicked a square, and a little 8 appeared, then you would know that this square is surrounded by 8 mines, all 8
of its adjacent squares are mines. In the second case, when you left-click a square whose all adjacent squares are not
mines, then all its adjacent squares (8 of its adjacent squares) are mine-free. If some of these adjacent squares also
come to the second case, then such deduce can go on. In fact, the computer will help you to finish such deduce process
and left-click all mine-free squares in the process. The object of the game is to uncover all of the non-mine squares, without
exploding any actual mines. Tom is very interesting in this game. Unfortunately his right mouse button is broken, so he could
only use his left mouse button. In order to avoid damage his mouse, he would like to use the minimum number of left clicks to
finish mine sweeper. Given the current situationof the mine sweeper, your task is to calculate the minimum number of left clicks.
Input
The first line of the input contains an integer T (T <= 12), indicating the number of cases. Each case begins with
a line containing an integer n (5 <= n <= 9), the size of the mine sweeper is n×n. Each of the following n lines
contains n characters M ij(1 <= i,j <= n), M ij denotes the status of the square in row i and column j, where ‘@’
denotes mine, ‘0-8’ denotes the number of mines adjacent to the square, specially ‘0’ denotes there are no mines
adjacent to the square. We guarantee that the situation of the mine sweeper is valid.
Output
For each test case, print a line containing the test case number (beginning with 1) and the minimum left mouse button clicks
to finish the game.
Sample Input
1
9
001@11@10
001111110
001111110
001@22@10
0012@2110
221222011
@@11@112@
2211111@2
000000111
Sample Output
Case 1: 24
题目大意:给出一张图,数字代表说周围8个位置有多少个地雷’@‘,然后根据扫雷的规则,点在0的位置话,会将一片连在一起的0全部显示出来,
外加0的周围一圈。问说最少要多少步可以点完所有没有泪的位置。
解题思路:遍历图,碰到’0‘的时候用dfs搜索将一片整体的全标记起来。然后最后在计算没有标记且不是雷的位置的个数,加上前面调用dfs的次数
就是答案了。
#include<iostream>using namespace std;const int N = 20;int n, v[N][N];char g[N][N];const int d[][2] ={ {0,1},{0,-1},{1,0},{-1,0},{1,-1},{1,1},{-1,-1},{-1,1}};//周围8个方向void init()//输入雷盘{scanf("%d", &n);for (int i = 0; i < n; i++)scanf("%s", g[i]);memset(v, 0, sizeof(v));}void dfs(int x, int y){v[x][y] = 1;if (g[x][y] != '0') return; //不是0就返回for (int i = 0; i < 8; i++){int p = x + d[i][0], q = y + d[i][1];if (p < 0 || p >= n) continue; //搜素过的不能再搜索 if (q < 0 || q >= n) continue;if (!v[p][q])dfs(p, q);}}int solve(){int ans = 0;for (int i = 0; i < n; i++)//搜索结果为0的情况{for (int j = 0; j < n; j++){if (!v[i][j] && g[i][j] == '0')dfs(i, j), ans++;}}for (int i = 0; i < n; i++)//搜索结果不为地雷的情况{for (int j = 0; j < n; j++){if (!v[i][j] && g[i][j] != '@')ans++;}}return ans;}int main(){int T, cas;scanf("%d", &cas);for (int i = 1; i <= cas; i++){init();printf("Case %d: %d\n", i, solve());}}
- Left Mouse Button
- Left Mouse Button
- FZU 1920 Left Mouse Button
- FOJ 1920 Left Mouse Button
- FZU - 1920 Left Mouse Button
- FZU1920 Left Mouse Button(dfs)
- FZU 1920 Left Mouse Button 解题报告
- fzu 1920 Left Mouse Button(dfs)
- Fuzhou Problem 1920 Left Mouse Button
- FZU 1920 Left Mouse Button(dfs)
- FZU Problem 1920 Left Mouse Button[dfs ||bfs,扫雷游戏]
- UINavigationBar left right button 初始化
- Mouse
- mouse
- mouse
- Mouse
- mouse
- IE7 hangs after clicking left button
- 快照snapshot技术
- 如何获取DataGridView表格中单元的坐标,宽度,高度,宽度差,高度差
- Genymotion下载慢或者下载失败的解决办法
- json解读
- 【HDU5889】Barricade(最短路+最小割)
- Left Mouse Button
- mysql中如何将已经获取的数据再进行一次自增id并获取
- Java对象的四个基本特性
- json4lua例子
- LeetCode-7. Reverse Integer
- 初接触python,,qwq
- leetcode之O(1)空间复杂度合并俩个数组
- MFC绘制动态曲线,用双缓冲绘图技术防闪烁
- Web.xml中的一些配置