zoukankan      html  css  js  c++  java
  • JAVA油田问题

    题目描述

    输入一个m行n列的字符矩阵,统计字符“@”组成多少个八连块。如果两个字符“@”所在的格子相邻(横、竖或者对角线方向),即属于同一个八连块。

    输入

    输入行数m,已经列数n。
    然后输入*和@

    输出

    联通块个数

    样例输入 Copy

    5 5
    ****@
    @@@
    @**@
    @@@
    @
    @@**@

    样例输出 Copy

    2

    package book;
    
    import java.util.Scanner;
    
    public class Oilfield {
    static int res=0;
    static int n,m;
    static char array[][];
    static int index[][];
    	public static void main(String[] args) {
    		Scanner sc=new Scanner(System.in);
    		n=sc.nextInt();//行数
    	    m=sc.nextInt();//列数
    		array=new char[n][m];
    		index=new int[n][m];
    		for(int i=0;i<n;i++) {
    			String s=sc.next();
    			System.out.println(s);
    			for(int j=0;j<m;j++) {
    				array[i][j]=s.charAt(j);//注意这里是输入的字符串
    				index[i][j]=0;
    			}
    		}
    		for(int i=0;i<n;i++) {
    			for(int j=0;j<m;j++) {
    				if(array[i][j]=='@'&&index[i][j]==0) {
    					slove(i,j,++res);
    				}
    			}
    		}
    		System.out.println(res);
    		
    		
    		
    	}
    	private static void slove(int i, int j, int k) {
    		if(i<0||i>=n||j<0||j>=m) {
    			return;//超出限界
    		}
    		else if(index[i][j]>0||array[i][j]!='@') {
    			return;//同一片油田或者不是油田的地方
    		}
    		else {
    		index[i][j]=k;
    		for(int x=-1;x<=1;x++) {
    			for(int y=-1;y<=1;y++) {
    				if(x!=0||y!=0) {
    					slove(i+x,j+y,k);
    				}
    			}
    		}
    		
    	}
    		}
    
    }
  • 相关阅读:
    硬件_WIFI&Blue
    C++_练习—多态_纯虚函数与抽象类
    C++_练习—多态_验证vptr分布初始化
    C++_练习—多态_证明vptr指针的存在
    单摆方程
    谐振动相关知识
    UVa 129
    LeetCode-316
    Java 运算符
    一些特殊的矩阵
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309593.html
Copyright © 2011-2022 走看看