• 扫雷算法


    问题描述
      扫雷游戏你一定玩过吧!现在给你若干个n×m的地雷阵,请你计算出每个矩阵中每个单元格相邻单元格内地雷的个数,每个单元格最多有8个相邻的单元格。 0<n,m<=100
    输入格式
      输入包含若干个矩阵,对于每个矩阵,第一行包含两个整数n和m,分别表示这个矩阵的行数和列数。接下来n行每行包含m个字符。安全区域用‘.’表示,有地雷区域用'*'表示。当n=m=0时输入结束。
    输出格式
      对于第i个矩阵,首先在单独的一行里打印序号:“Field #i:”,接下来的n行中,读入的'.'应被该位置周围的地雷数所代替。输出的每两个矩阵必须用一个空行隔开。
    样例输入
    4 4
    *...
    ....
    .*..
    ....
    3 5
    **...
    .....
    .*...
    0 0
    样例输出
    Field #1:
    *100
    2210
    1*10
    1110

    Field #2:
    **100
    33200
    1*100
    (注意两个矩阵之间应该有一个空行,由于oj的格式化这里不能显示出来)
    数据规模和约定
      0<n,m<=100
     
    代码:
    import java.util.Scanner;
    
    public class sweep {
    	public static void main(String[] args) {
    		Scanner sc  = new Scanner(System.in);
    		int n = 1;
    		int m = 1;
    		while(n!=0&&m!=0){
    			n = sc.nextInt();
    			m = sc.nextInt();
    			hanshu(n,m);
    		} 
    	}
    
    	private static void hanshu(int n, int m) {
    		Scanner sc = new Scanner(System.in);
    		char a[][] = new char[n][m];
    		char b[][] = new char[n][m];
    		
    		for (int i = 0; i < n; i++) {
    			String s = sc.next();
    			for (int j = 0; j < m; j++) {
    				a[i][j] = s.charAt(j);
    			}
    		}
    		
    		for (int i = 0; i < n; i++) {
    			for (int j = 0; j < m; j++) {
    				if(a[i][j]=='*'){
    					b[i][j] = '*';
    					System.out.print(b[i][j]+" ");
    				}else{
    					int k = 0;
    					if(i>0&&j>0){
    						k += f(a[i-1][j-1])+f(a[i-1][j])+f(a[i][j-1]);
    					}else if(i>0){
    						k +=f(a[i-1][j]);
    					}else if(j>0){
    						k +=f(a[i][j-1]);
    					}
    					if(i>0&&j<m-1){
    						k += f(a[i-1][j+1])+f(a[i][j+1]);
    					}else if(j<m-1){
    						k += f(a[i][j+1]);
    					}
    					if(i<n-1&&j>0){
    						k += f(a[i+1][j-1])+f(a[i+1][j]);
    					}else if(i<n-1){
    						k +=f(a[i+1][j]);
    					}
    					if(i<n-1&&j<m-1){
    						k += f(a[i+1][j+1]);
    					}
    					System.out.print(k+" ");
    				}
    			}
    			System.out.println();
    		}
    	}
    
    	private static int f(char c) {
    		if(c=='*'){
    			return 1;
    		}else{
    			return 0;
    		}
    	}
    }
    

      

  • 相关阅读:
    Java中的接口回调
    java中使用String的replace方法替换html模板保存文件
    overflow:解决 div的高度塌陷问题
    鼠标单击到 img行的时候图片隐藏方案
    HTML中的行级标签和块级标签 《转换》
    Java中的异常注意点
    oracle数据库忘记用户名和密码莫着急
    Log4j记录日志使用方法
    Java中的overload(方法的覆写)
    jdk和tomcat环境配置
  • 原文地址:https://www.cnblogs.com/-rainbow-/p/8349479.html
Copyright © 2020-2023  润新知