Mineweep(扫雷)

简介: Mineweep(扫雷)

每周一题之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

*/

  package 蓝桥;
  import java.util.Scanner;
  public class 扫雷 {
    public static void main(String[] args) {
      Scanner scanner=new Scanner(System.in);
      int a,b,sum=1;
      while (true) {
        a=scanner.nextInt();
        b=scanner.nextInt();
        if (a==0||b==0) {
          System.out.println("*/");
          break;
        }
        System.out.println();
        System.out.println("Field #"+sum+":");
        sum++;
        char[][] lei=new char[a][b];
        int[][] lei_int=new int[a][b];
        for (int i = 0; i < a; i++) {
          for (int j = 0; j < b; j++) {
            lei_int[i][j]=0;
          }
        }
        for (int i = 0; i < a; i++) {
          String tampString= scanner.next();
          for (int j = 0; j < b; j++) {
            lei[i][j]=tampString.charAt(j);
            if (lei[i][j]=='*') {
              lei_int[i][j]=99;
              if (i>0&&lei_int[i-1][j]!=99) {
                lei_int[i-1][j]+=1;
              }
              if (i<a-1&&lei_int[i+1][j]!=99) {
                lei_int[i+1][j]+=1;
              }
              if (j>0&&lei_int[i][j-1]!=99) {
                lei_int[i][j-1]+=1;
              }
              if (j<b-1&&lei_int[i][j+1]!=99) {
                lei_int[i][j+1]+=1;
              }
              if (j>0&&i>0&&lei_int[i-1][j-1]!=99) {
                lei_int[i-1][j-1]+=1;
              }
              if (j<b-1&&i<a-1&&lei_int[i+1][j+1]!=99) {
                lei_int[i+1][j+1]+=1;
              }
              if (j>0&&i<a-1&&lei_int[i+1][j-1]!=99) {
                lei_int[i+1][j-1]+=1;
              }
              if (j<b-1&&i>0&&lei_int[i-1][j+1]!=99) {
                lei_int[i-1][j+1]+=1;
              }
            }
          }
        }
        for (int i = 0; i < a; i++) {
          for (int j = 0; j < b; j++) {
            if (lei_int[i][j]==99) {
              System.out.print("*");
            }
            else {
              System.out.print(lei_int[i][j]);
            }
          }
          System.out.println();
        }
      }
    }
  }

   


相关文章
|
6月前
|
C语言
扫雷游戏
扫雷游戏
41 0
|
4月前
|
存储
|
11月前
|
C语言
扫雷游戏的实现(上)
扫雷游戏的实现
52 0
|
6月前
|
算法 C语言
三子棋小游戏(可改棋盘大小)
三子棋小游戏(可改棋盘大小)
73 0
|
11月前
扫雷游戏的实现(详解)
扫雷游戏的实现(详解)
90 0
|
11月前
|
存储
扫雷小游戏
扫雷小游戏
79 0
|
11月前
|
C语言
扫雷游戏的实现(下)
扫雷游戏的实现(下)
54 0
|
小程序
扫雷小游戏详解
扫雷小游戏详解
64 0
简易扫雷游戏
简易扫雷游戏
86 0