题目描述:
每周一题之 2 Mineweep(扫雷)
- Minesweeper(扫雷)
- PC/UVa IDs: 110102/10189,
- Popularity: A,
- Success rate: high Level: 1
测试地址: https://vjudge.net/problem/UVA-10189
[问题描述]
- 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.
[输入]
- 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.
下面这段话蓝桥官方误导:
[输出]
对于每对整数 i 和 j, 按原来的顺序输出 i 和 j, 然后输出二者之间的整数中的最大循环节长度. 这三个整数应该用单个空格隔开, 且在同一行输出. 对于读入的每一组数据, 在输出中应位于单独的一行.
[样例输入]
- 4 4
- *...
- ....
- .*..
- ....
- 3 5
- **...
- .....
- .*...
- 0 0
[样例输出]
- Field #1:
- *100
- 2210
- 1*10
- 1110
- Field #2:
- **100
- 33200
- 1*100
- */
解析:
1. 处理好边界:
2. 遍历每个点的每个方向, 操作结课
AC 代码:
- package december.year18;
- import java.util.Scanner;
- public class Solution2 {
- static int [] x={0,0,1,-1,1,-1,-1,1};
- static int [] y={1,-1,0,0,1,-1,1,-1};
- public static void main(String[] args) {
- Scanner in = new Scanner(System.in);
- int cindex=1;
- while (in.hasNext()) {
- int n = in.nextInt();
- int m = in.nextInt();
- if(m==0&&m==n) {
- return;
- }
- char[][] mat = new char[n][];
- for (int i = 0; i < mat.length; i++) {
- mat[i]=in.next().toCharArray();
- }
- int mL=mat[0].length;
- for (int i = 0; i < mat.length; i++) {
- for (int j = 0; j < mL; j++) {
- if(mat[i][j]!='*') {
- for (int k = 0; k < 8; k++) {
- int newx=i+x[k];
- int newy=j+y[k];
- if(newx>=0&&newy>=0&&newx<n&&newy<mL) {
- if(mat[newx][newy]=='*') {
- if(mat[i][j]=='.') {
- mat[i][j]='0';
- }
- mat[i][j]++;
- }
- }
- }
- }
- }
- }
- if(cindex>1)System.out.println();
- System.out.println("Field #"+cindex+":");
- cindex++;
- for (int i = 0; i < mat.length; i++) {
- for (int j = 0; j < mat[i].length; j++) {
- if(mat[i][j]=='.') {
- System.out.print('0');
- }else {
- System.out.print(mat[i][j]);
- }
- }
- System.out.println();
- }
- }
- }
- }
来源: https://www.cnblogs.com/dgwblog/p/10094197.html