zoukankan      html  css  js  c++  java
  • Hackerrank Connected Cell in a Grid

    Problem Statement

    You are given a matrix with m rows and n columns of cells, each of which contains either 1or 0. Two cells are said to be connected if they are adjacent to each other horizontally, vertically, or diagonally. The connected and filled (i.e. cells that contain a 1) cells form aregion. There may be several regions in the matrix. Find the number of cells in the largest region in the matrix.

    Input Format
    There will be three parts of t input:
    The first line will contain m, the number of rows in the matrix.
    The second line will contain n, the number of columns in the matrix.
    This will be followed by the matrix grid: the list of numbers that make up the matrix.

    Output Format
    Print the length of the largest region in the given matrix.

    Constraints
    0<m<10
    0<n<10

    Sample Input:

    4
    4
    1 1 0 0
    0 1 1 0
    0 0 1 0
    1 0 0 0
    

    Sample Output:

    5
    

    Task: 
    Write the complete program to find the number of cells in the largest region.

    Explanation

    X X 0 0
    0 X X 0
    0 0 X 0
    1 0 0 0  
    

    The X characters indicate the largest connected component, as per the given definition. There are five cells in this component.

    思路分析:这题是Hackerrank一次的比赛题目。也是G公司一次面试中出现的面试原题。

    要在一个矩阵中找到最大的连通区域。

    基本能够用DFS搜索解决,在每一个位置重新启动搜索找连通区域,一共同拥有8个方向/分支,贪心保留最大cell数目。用visited标记数组记录已经count过的位置进行剪枝加速。

    是一道中规中矩的考察DFS/BFS搜索的题目。

    AC Code

    import java.io.*;
    import java.util.*;
    import java.text.*;
    import java.math.*;
    import java.util.regex.*;
    
    public class Solution {
    
        static int[][] actionCosts = {{1, 0}, {-1, 0}, {0, 1}, {0, -1},
    		   {1, 1}, {1, -1}, {-1, 1}, {-1, -1}};
    	
    	static int cellCounter = 0;
    	
    	public static void main(String[] args) throws NumberFormatException, IOException {
            /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
    		DataInputStream in = new DataInputStream(new BufferedInputStream(System.in)); 
    		int m = Integer.valueOf(in.readLine());
    		int n = Integer.valueOf(in.readLine());
    		int [][] matrix = new int [m][n];
    		for(int i = 0; i < m; i++){
    			String line = in.readLine();
    			for(int j = 0; j < n; j++){
    				matrix[i][j] = Integer.valueOf(line.split(" ")[j]);
    			}
    		}
    		int maxNum = findMaxConnectedCellNum(matrix, m, n);
    		System.out.println(maxNum);
        }
    
    	private static int findMaxConnectedCellNum(int[][] matrix, int m, int n) {
    		// TODO Auto-generated method stub
    		int [][] visited = new int[m][n];
    		int maxNum = 0;
    		for(int i = 0; i < m; i++){
    			for(int j = 0; j < n; j++){
    				dfs(matrix, visited, i, j, m, n);
    				if(cellCounter > maxNum) maxNum = cellCounter;
    				cellCounter = 0;
    			}
    		}
    		return maxNum;
    	}
    
    	private static void dfs(int[][] matrix, int[][] visited, int i, int j,
    			 int m, int n) {
    		// TODO Auto-generated method stub
    		if(i < 0 || i >= m || j < 0 || j >= n){
    			return;
    		}
    		if(visited[i][j] == 1 || matrix[i][j] == 0) return;
    		cellCounter++;
    		visited[i][j] = 1;
    		for(int di = 0; di < 8; di++){
    			dfs(matrix, visited, i + actionCosts[di][0], j + actionCosts[di][1], m, n);
    		}
    	}
    }


  • 相关阅读:
    Neo4j图形数据库备份
    Linux中Tomcat 自动设置CATALINA_HOME方法
    VNC viewer 无法打开oracle 11g图形界面方案
    CYPHER 语句(Neo4j)
    Tomcat部署时war和war exploded区别
    java中不能使用小数点(.)来作为分隔符
    做一个完整的Java Web项目需要掌握的技能
    从零讲Java,给你一条清晰地学习道路!该学什么就学什么!
    MYSQL数据库表排序规则不一致导致联表查询,索引不起作用问题
    chrome浏览器的跨域设置——包括版本49前后两种设置
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7028704.html
Copyright © 2011-2022 走看看