JAVA 计算岛屿个数算法

前几天收到了XX工业的面试邀请。公司位于海淀区五道口附近。
属于比较传统的起因。先进行笔试,没有专门面试的屋子,笔试在门口电脑桌上答的。
笔试上面最后一个算法题,计算岛屿个数:
0代表水域 1代表陆地 上下左右相连的陆地周围被水域包围,则该区域为一个岛屿

例如:
{0,0,0,0,0,0,0,0,0,0,1,0},
{0,0,1,0,0,0,0,0,1,0,0,0},
{0,1,1,1,1,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,1,0}的岛屿个数为4,写出具体的算法。

解题思路
二维数组查找1,查找到后数量+1,并把周围的1都变为0.继续查找。
具体算法:
int[][] arry = {
{0,0,0,0,0,0,0,0,0,0,1,0},
{0,0,1,0,0,0,0,0,1,0,0,0},
{0,1,1,1,1,0,0,0,0,0,0,0},
{0,0,1,0,0,0,0,1,0,0,0,1},
{0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,1,1,0,0,1},
{0,0,0,0,0,0,0,1,1,0,0,0},
{0,0,1,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,1,0}
};

int num = calIsLands(arry);//岛屿数量

//循环二维数组,查找岛屿数量

public static int calIsLands(int[][] arry) {
int num =0;
int lenth = arry.length;
for(int i= 0;i<lenth;i++) {
for(int j = 0;j<arry[i].length;j++) {
if(arry[i][j]==1) {
changeIsLands(arry,i,j);
num++;
}
}
}
return num;
}

//递归把周围的1变为0
public static void changeIsLands(int[][] arry,int i,int j) {
if(i<0||j<0||i>=arry.length||j>=arry[i].length||arry[i][j]!=1) {
return;
}
arry[i][j]=0;
changeIsLands(arry,i+1,j);
changeIsLands(arry,i-1,j);
changeIsLands(arry,i,j+1);
changeIsLands(arry,i,j-1);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值