咨询电话：15576924798

# Mineweep（扫雷）

Minesweeper （扫雷）

PC/UVa IDs: 110102/10189,

Popularity: A, Success rate: high Level: 1

[问题描述]

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.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(); } } }}