给定'1'(陆地) 和'0'(水) 的二维网格图,计算岛屿的数量。 深度优先搜索

xiaoxiao2021-02-28  111

package test; /* * 岛屿的个数 给定'1'(陆地) 和'0'(水) 的二维网格图,计算岛屿的数量。 一个岛被水包围,并且通过水平或垂直连接相邻的陆地而形成。你可以假设网格的四个边均被水包围。 示例1: 11110 11010 11000 00000 答案: 1 示例2: 11000 11000 00100 00011 答案: 3*/ public class IslandCount { public static int dfs(int[][] island,int[][] isvisit) { int count = 0; for (int i = 0; i < island.length; i++) { for (int j = 0; j < island[0].length; j++) { if(isvisit[i][j]!=1) { if(island[i][j]==1) {//表示是第一个1,进行加一 count++; } //进行深度优先搜索 dfsVisit(island,isvisit,i,j); System.out.println("---------------"); } } } return count; } public static void dfsVisit(int[][] island,int[][] isvisit,int i,int j) { if(i<0 ||j<0 || i>island.length-1 || j>island[0].length-1) { //表示已经数组越界了 return; } if(island[i][j]==0) { //表示不是岛屿 return; } if(isvisit[i][j]==1) { //已经遍历过了, return; }else { //表示没有遍历过 isvisit[i][j]=1; System.out.println("i="+i+" j="+j); dfsVisit(island,isvisit,i-1,j);//上 dfsVisit(island,isvisit,i+1,j);//下 dfsVisit(island,isvisit,i,j-1);//左 dfsVisit(island,isvisit,i,j+1);//右 } } public static void main(String[] args) { //岛屿的数量 int[][] island = {{1,1,0,1,1}, {1,1,0,0,0}, {0,0,1,0,0}, {1,0,0,1,1}}; //isvisit表示是否遍历过 int[][] isvisit =new int[island.length][island[0].length]; System.out.println(dfs(island,isvisit)); } }

结果:

i=0 j=0i=1 j=0i=1 j=1i=0 j=1------------------------------i=0 j=3i=0 j=4------------------------------------------------------------------------------------------i=2 j=2---------------------------------------------i=3 j=0---------------------------------------------i=3 j=3i=3 j=4---------------5

转载请注明原文地址: https://www.6miu.com/read-2613016.html

最新回复(0)