Minesweeper
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 nd where are all the mines within a M N eld. 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 ollowing 4 4 eld with 2 mines (which are represented by an `*’ character):
*...
....
.*..
....
If we would represent the same eld 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 elds. The rst line of each eld contains two integers n and m (0 < n; m 100) which stands for the number of lines and columns of the eld respectively. The next n lines contains exactly m characters and represent the eld. 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 rst eld line where n = m = 0 represents the end of input and should not be processed.
Output
For each eld, you must print the following message in a line alone:
Field #x:
Where x stands for the number of the eld (starting from 1). The next n lines should contain the eld with the `.’ characters replaced by the number of adjacent mines to that square. There must be an empty line between eld outputs.
Sample Input
4 4
*...
....
.*..
....
3 5
**...
.....
.*...
0 0
Sample Output
Field #1:
*100
2210
1*10
1110
Field #2:
**100
33200
1*100
思路
遍历一遍二维矩阵,将地雷周围的字符++(注意边界)即可
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int count = 1;
while (sc.hasNext()) {
int r = sc.nextInt();
int c = sc.nextInt();
if (r == 0 && c == 0) {
break;
}
if (count != 1) {
System.out.println();
}
String nothing = sc.nextLine();
char[][] arr = new char[r][c];
for (int i = 0; i < arr.length; i++) {
arr[i] = sc.nextLine().toCharArray();
}
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (arr[i][j] == '*') {
for (int a = i - 1; a <= i + 1; a++) {
for (int b = j - 1; b <= j + 1; b++) {
f(arr, a, b);
}
}
}
}
}
// print
System.out.println("Field #" + count + ":");
count++;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (arr[i][j] != '*') {
System.out.print(arr[i][j] - '.');
} else {
System.out.print("*");
}
}
System.out.println();
}
}
}
// 為arr[i][j]加一(arr[i][j] != '*')
private static void f(char[][] arr, int i, int j) {
if (i < 0 || i > arr.length - 1) {
return;
}
if (j < 0 || j > arr[i].length - 1) {
return;
}
if (arr[i][j] == '*') {
return;
} else {
arr[i][j]++;
}
}
}