Johnny


私信TA

用户名:JohnnyLin

访问量:1468

签 名:

等  级
排  名 25937
经  验 539
参赛次数 0
文章发表 3
年  龄 0
在职情况 学生
学  校 广东金融学院
专  业

  自我简介:

解题思路:

思路其实很简单,就是每遇到一个安全区域'.',就扫描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 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区