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);
    				}
    			}
    		}
    		
    	}
    		}
    
    }
  • 相关阅读:
    洛谷 P1430 序列取数
    洛谷 P2042 维护数列
    洛谷 P3391 【模板】文艺平衡树(Splay)
    Permutation UVA
    treap板子(洛谷 P3369 【模板】普通平衡树(Treap/SBT))
    Jumping Jack CodeForces
    Increasing Sequence CodeForces
    Cunning Gena CodeForces
    Hie with the Pie POJ
    ACboy needs your help HDU
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309593.html
Copyright © 2011-2022 走看看