题目描述:

每周一题之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();
}
}
} }

最新文章

  1. ruby -- 进阶学习(一)subdomain配置与实现
  2. Linux0.11内核剖析--初始化程序(init)
  3. linux命令----网络地址
  4. C++经典编程题#3:数字求和
  5. 九度-剑指Offer
  6. Python中类的运算符重载
  7. &lt;离散数学&gt;学习笔记1--逻辑和证明
  8. Docker 跟 NodeJs 最佳实践
  9. 读RCNN论文笔记
  10. THinkPHP的认识
  11. bzoj 4836: 二元运算
  12. .NET面试题系列(十七)前端面试
  13. 使用/dev/poll的str_cli函数
  14. DCM、PLL、PMCD、MMCM相关
  15. excle中表引用
  16. Effective Java 第三版——62. 当有其他更合适的类型时就不用字符串
  17. Gym101889B. Buggy ICPC(打表)
  18. yum使用过程中的常见错误
  19. Engineering Management
  20. gitlab上如何添加二进制文件(设计文档)

热门文章

  1. C语言学习笔记--内存分区
  2. OpenCV 官方工程报错(1) Couldn&#39;t load mixed_sample from loader
  3. 封装 Toast
  4. bootstrap媒体查询常用写法
  5. day17 12.复习
  6. [转]AJAX工作原理及其优缺点
  7. strcmp()比较函数和strcasecmp()和strnatcmp()
  8. c语言实战: 计算时间差
  9. c++ 拷贝构造函数 继承
  10. 基于ef core 2.0的数据库增删改审计系统