博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mineweep(扫雷)
阅读量:3814 次
发布时间:2019-05-22

本文共 2994 字,大约阅读时间需要 9 分钟。

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

转载地址:http://mhxxn.baihongyu.com/

你可能感兴趣的文章
Android 自定义控件 轻松实现360软件详情页
查看>>
程序员的自我修养——操作系统篇
查看>>
关于多态的一道题
查看>>
foreach
查看>>
怎么保证service不被杀死
查看>>
Android HandlerThread 完全解析
查看>>
Android布局
查看>>
Android中弱引用与软引用的应用场
查看>>
Android框架
查看>>
Dalvik虚拟机垃圾收集机制
查看>>
Android应用程序在新的进程中启动新的Activity的方法和过程分析
查看>>
Android应用程序的Activity启动过程简要介绍和学习计划
查看>>
Message的参数和方法
查看>>
View的顶点坐标以及getMeasuredWidth和getWidth
查看>>
SurfaceView的双缓冲机制
查看>>
为什么Android要增加Binder
查看>>
Android中ListView分页加载数据
查看>>
Android快速开发系列 10个常用工具类
查看>>
Java爬虫,信息抓取的实现
查看>>
Android OkHttp完全解析 是时候来了解OkHttp了
查看>>