当前位置: 代码迷 >> 综合 >> UVa10189 Minesweeper
  详细解决方案

UVa10189 Minesweeper

热度:95   发布时间:2024-01-15 06:57:41.0

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):

*...
....
.*..
....
1
2
3
4
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
1
2
3
4
5
6
7
8
9
10
11
Sample Output
Field #1:
*100
2210
1*10
1110
Field #2:
**100
33200
1*100

水题:模拟就行

注意边界判定条件和矩阵之间有空格(且大于1)

 

import java.io.BufferedInputStream;
import java.util.Scanner;public class Main {public static void main(String[] args) {//Scanner in = new Scanner (new BufferedInputStream(System.in));Scanner in = new Scanner(new BufferedInputStream(System.in));int kase=0;while(true){kase++;int n=in.nextInt();int m=in.nextInt();if(n==0&&m==0) break;in.nextLine();char [][] a=new char [105][105];char [][] b=new char [105][105];for(int i=0;i<n;i++){a[i]=new char[105];String s=in.next();a[i]=s.toCharArray();}for(int i=0;i<n;i++)for(int j=0;j<m;j++){//System.out.println(i+" "+j);if(a[i][j]=='*'){for(int k=i-1;k<=i+1;k++)for(int t=j-1;t<=j+1;t++){if(k<n&&k>=0&&t<m&&t>=0){if(a[k][t]=='*')continue;if(a[k][t]=='.'){a[k][t]='1';}else{a[k][t]=(char)((int)(a[k][t])+1);}}}}}if (kase > 1) System.out.println();System.out.println("Field #"+kase+":");for(int i=0;i<n;i++){for(int j=0;j<m;j++)if(a[i][j]=='.')System.out.print('0');else	  System.out.print(a[i][j]);System.out.println();}}}
}