解题思路:

思路其实很简单,就是每遇到一个安全区域'.',就扫描8个方向,遇到地雷'*',该安全位置就加一。

参考代码:

import java.util.Scanner;

/**
* @author JohnnyLin
* @version Creation Time:2020年8月5日 下午3:40:47
*/
public class Main {
    private static char[][]map;
    private static int cnt;

   //八个方向

    private static int [][]dir= {{-1,0},{-1,-1},{0,-1},{1,-1},{1,0},{1,1},{0,1},{-1,1}};
    private static int n,m;

    //打印时要注意 由于map是char类型,加一是在ASCII值得基础上加的  而'.'的值为46因此要减去46再打印

    public static void show(char a[][]) {
        for (int i = 0; i<n; i++) {
            for (int j = 0; j < m; j++) {
                if(map[i][j]=='*')
                    System.out.print(map[i][j]);
                else
                    System.out.print(map[i][j]-46);            
            }
            System.out.println();         
        }
        
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        /*char值对应的ASCII值
        System.out.println((int)'*');//42
        System.out.println((int)'0');//48
        System.out.println((int)'1');//49
        System.out.println((int)('*'+'1'));//91
        System.out.println(('*'+1));//43
        System.out.println((int)('*'+1));//43
        System.out.println((int)'.');//46
        */
        Scanner reader =new Scanner(System.in);
        n=reader.nextInt();
        m=reader.nextInt();
        while(n!=0&&m!=0) {
            map=new char[n][m];
            cnt++;
            for (int i = 0; i < n; i++) {
                String s=reader.next();
                for (int j = 0; j < m; j++) {
                    map[i][j]=s.trim().charAt(j);                
                }
            }
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < m; j++) {
                    if(map[i][j]=='.') {
                        dfs(i,j);
                    }
                }
            }
            System.out.println("Field"+" #"+cnt+":");
            show(map);
            n=reader.nextInt();
            m=reader.nextInt();
            System.out.println();
        }
        

    }
    private static void dfs(int x, int y) {
        for(int i=0;i<8;i++) {
            int nx=x+dir[i][0];
            int ny=y+dir[i][1];
            if(nx>=0&&nx

点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论