UVA 10189 -Minesweeper
来源:互联网 发布:python ftplib 编辑:程序博客网 时间:2024/04/24 18:04
Have you ever played Minesweeper? It’s a cute little game which comes within a certain Operating System which name we can’t really remember. Well, the goal of the game is to find where are all the mines within a M × N field. To help you, the game shows a number in a square which tells you how many mines there are adjacent to that square. For instance, supose the following 4 × 4 field with 2 mines (which are represented by an ‘*’ character):
*…
….
.*..
….
If we would represent the same field placing the hint numbers described above, we would end up with:
*100
2210
1*10
1110
As you may have already noticed, each square may have at most 8 adjacent squares.
Input
The input will consist of an arbitrary number of fields. The first line of each field contains two integers n and m (0 < n, m ≤ 100) which stands for the number of lines and columns of the field respectively. The next n lines contains exactly m characters and represent the field.
Each safe square is represented by an ‘.’ character (without the quotes) and each mine square is represented by an ‘*’ character (also without the quotes). The first field line where n = m = 0 represents the end of input and should not be processed.
Output
For each field, you must print the following message in a line alone:
Field #x:
Where x stands for the number of the field (starting from 1). The next n lines should contain the field with the ‘.’ characters replaced by the number of adjacent mines to that square. There must be an empty line between field outputs.
Sample Input
4 4
*…
….
.*..
….
3 5
**…
…..
.*…
0 0
Sample Output
Field #1:
*100
2210
1*10
1110
Field #2:
**100
33200
1*100
题意:类似于扫雷的游戏,在一个m x n区域里面有一定数量的雷,不是雷的地方用‘.’表示,我们需要把这块区域用星花’*’和数字表示出来,其中雷的位置依然使用‘’表示,不是雷的位置使用一个数字表示其周围8个位置雷的个数
方法:可以使用二维数组用于记录这块区域,遍历一次二维数组,判断这个位置是否是雷和不是雷时周围8个位置雷的数量,可以使用两个一维数组用来判断周围8个位置是否有雷,即行数和列数的增量。要注意的是题目要求每两组数据之间用一个空行隔开,所以最后一组数据后面不可以有空行。
#include <iostream>using namespace std;//the eight directionconst int dirX[] = {0, 0, -1, -1, -1, 1, 1, 1};const int dirY[] = {1, -1, 0, -1, 1, 0, -1, 1};char mines[101][101];int row, col;//the size of fieldbool isRight(int m, int n){ if(m < 0 || n < 0 || m >= row || n >= col) return false; return true;}void printMines(int m, int n){ if(mines[m][n] == '*') cout << '*'; else{ int num = 0; for(int i = 0; i < 8; i++){ if(isRight(m + dirX[i], n + dirY[i]) && mines[m + dirX[i]][n + dirY[i]] == '*') num++; } cout << num; }}int main(){ int cnt = 1;//count the times while(cin >> row >> col && row && col){ if(cnt != 1) cout << endl; for(int i = 0; i < row; i++){ for(int j = 0; j < col; j++){ cin >> mines[i][j]; } } cout << "Field #" << cnt++ << ':' << endl; for(int i = 0; i < row; i++){ for(int j = 0; j < col; j++){ printMines(i, j); } cout << endl; } } return 0;}
- Uva 10189 - Minesweeper
- uva 10189 - Minesweeper
- UVa 10189 - Minesweeper
- uva 10189 - Minesweeper
- uva 10189 Minesweeper
- UVa 10189 Minesweeper (模拟)
- UVa 10189 Minesweeper
- UVa 10189 Minesweeper
- UVa 10189 - Minesweeper
- uva Minesweeper 10189
- uva 10189 Minesweeper
- UVA 10189 Minesweeper
- UVA 10189 -Minesweeper
- UVa Problem Solution: 10189 - Minesweeper
- UVA 10189 - Minesweeper(扫雷)
- UVA 10189 - Minesweeper(扫雷)
- Uva 10189 Minesweeper 扫雷游戏
- uva minesweeper
- Manifest merger failed with multiple errors
- 微商真的那么让人讨厌吗? 如果找对了方向就不会了
- 20170808面试问题----SQL优化怎么写
- 第三章摘抄笔记The C Programming Lanuage
- HDU 1024 Max Sum Plus Plus(动态规划 很详很详解)
- UVA 10189 -Minesweeper
- RabbitMQ 知识总结
- hadoop初识之六:HDFS架构及linux下eclipse环境的准备
- C++智能指针简单实现
- 百度前端学院学习心得
- android改变标题文字
- 利用TensorFlow训练简单的二分类神经网络模型
- express helloWorld
- HDU-1285 确定比赛名次