岛屿问题
来源:互联网 发布:如何加强网络空间安全 编辑:程序博客网 时间:2024/04/29 09:14
题目
给一个01矩阵,求不同的岛屿的个数。
0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
思路
遍历,然后为1 改为0,检查周边,注意判断是否可以+、-1,是否为边界
递归遍历周围ps: 这里表面上先对于某一个值为1的点,先遍历四周,还是先置为0,貌似是一样的;但是在实际代码实现的时候,这二者是有区别的。
对于有值为1的点相邻的情况下,如果是先递归寻找的话,会导致下一层的递归找到的点是原来找过的。会造成循环递归,而没有终止条件,最终导致内存溢出,导致程序崩溃。
先将找到的点置为0就不会有上述问题的存在。
代码
#include<stdio.h>void IslandsCore(int (&grid)[5][5], int i, int j,int m,int n){ grid[i][j]=0; if(i>1&&grid[i-1][j]==1) IslandsCore(grid,i-1,j,m,n); if(j>1&&grid[i][j-1]==1) IslandsCore(grid,i,j-1,m,n); if((i<m-1)&&grid[i+1][j]==1) IslandsCore(grid,i+1,j,m,n); if((j<n-1)&&grid[i][j+1]==1) IslandsCore(grid,i,j+ 1,m,n);}int numsofIslands(int (&grid)[5][5], int m, int n){ int cnt=0; for (int i = 0;i<m;i++) { for(int j = 0;j<n;j++) { if(grid[i][j]==1) { grid[i][j]=0; printf("i:%d,j:%d, --- %d\n",i,j,grid[i][j]); cnt++; if(i>1&&grid[i-1][j]==1) IslandsCore(grid,i-1,j,m,n); if(j>1&&grid[1][j-1]==1) IslandsCore(grid,i,j-1,m,n); if((i<m-1)&&grid[i+1][j]==1) IslandsCore(grid,i+1,j,m,n); if((j<n-1)&&grid[i][j+1]==1) IslandsCore(grid,i,j+1,m,n); } } } return cnt;} int main(){ // 1, 1, 0, 0, 0], [0, 1, 0, 0, 1], [0, 0, 0, 1, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 1 int grid[5][5]={{1, 1, 0, 0, 0},{0, 1, 0, 0, 1}, {0, 0, 0, 1, 1},{0, 0, 0, 0, 0},{0, 0, 0, 0, 1}}; int cnt = numsofIslands(grid,5,5); printf("%d\n",cnt);}
0 0
- 岛屿问题
- 岛屿问题
- 雷达覆盖岛屿的问题
- 华为OJ-岛屿个数问题
- 问题 I D.岛屿面积有多大
- 问题 B: 最大岛屿 河南省第九届省赛
- [LeetCode463]Island Perimeter岛屿周长问题
- POJ 1328 岛屿雷达问题 贪心
- 岛屿周长问题(python3实现)
- 岛屿个数
- 最大岛屿
- 最大岛屿
- 岛屿Islands
- 最大岛屿
- 最大岛屿
- 最大岛屿
- 岛屿周长
- 冒险岛问题:划分岛屿与陆地(矩阵求四邻域个数问题)
- 语音
- 吉布斯采样(Gibbs Sampling)及相关算法
- 历届试题 分糖果
- rocks cluster笔记1——Linux基础
- const int *p和int * const p的区别(常量指针与指向常量的指针)
- 岛屿问题
- POJ 3666 Making the Grade 【DP + 离散化 + 贪心 】
- C++11 lambda表达式
- Android ViewPager
- HTML5 canvas标签-1 基本使用
- {模板}Tarjan缩环-人工栈
- 126. Word Ladder II
- sdp文件详细总结
- bootstrap学习心得 js插件篇