冒险岛问题:划分岛屿与陆地(矩阵求四邻域个数问题)
来源:互联网 发布:淘宝无线端图片模糊 编辑:程序博客网 时间:2024/04/30 19:23
冒险岛问题:划分岛屿与陆地
我们可以用一个二维数组来描述冒险岛的地图,0表示水域,1表示陆地。四邻域相近为连通(不包括对角),统计冒险岛上有几个岛屿?
输入: 4 5
11110
11010
11001
11101
输出:2
#include "stdafx.h"#include <vector>using namespace std;//递归调用,遍历某个岛屿的所有像素点void arrSearch(int i,int j,vector<vector<short>> *arr,int num,int nrow,int ncol){ // 从上下左右四个方向查询邻近像素点是否为陆地 if ((i > 0)){ if ((*arr)[i - 1][j] == 1){ (*arr)[i - 1][j] = num; arrSearch(i - 1, j, arr, num, nrow, ncol); } } if ((i<nrow-1)){ if ((*arr)[i + 1][j] == 1) { (*arr)[i + 1][j] = num; arrSearch(i + 1, j, arr, num, nrow, ncol); } } if ((j<ncol-1)){ if ((*arr)[i][j + 1] == 1){ (*arr)[i][j + 1] = num; arrSearch(i, j + 1, arr, num, nrow, ncol); } } if (j>0){ if (((*arr)[i][j - 1] == 1)){ (*arr)[i][j - 1] = num; arrSearch(i, j - 1, arr, num, nrow, ncol); } }}void testarr(short arr[][10]){ //测试二维数组传递地址的形式,该形式合法}int _tmain(int argc, _TCHAR* argv[]){ int m = 6;//矩阵的行 int n = 6;//矩阵的列 int num = 1;//岛的标注数 vector<vector<short>> arr2;//vector方式存储矩阵 vector<short> arr3; //初始化vector for (int i = 0; i < n; i++){ arr3.push_back(0); } for (int j = 0; j < m; j++){ arr2.push_back(arr3); }//冒险岛矩阵赋初值 short arr9[10][10] = { { 1, 1, 0, 1, 0 }, { 1, 0, 1, 0, 0 }, { 0, 1, 0, 1, 0 }, { 1, 1, 0, 1, 0 }, { 1, 0, 1, 1, 0 } };// testarr(arr9); //测试二维数组传递地址的形式 //vector向量矩阵赋值 for (int i = 0; i < n; i++){ for (int j = 0; j < m; j++){ arr2[j][i] = arr9[j][i]; } }//遍历每一个像素点,若是没处理过的陆地则进行递归寻找相邻像素点 for (int i = 0; i < m; i++){ for (int j = 0; j < n; j++){ if (arr2[i][j]==1){ /* //测试上方的点是否已处理 if ((i > 0)){ if(arr2[i - 1][j]> 1){ arr2[i][j] = arr2[i - 1][j]; } } //测试左边的点是否已处理 if (j > 0){ if (arr2[i][j - 1] > 1){arr2[i][j] = arr2[i][j - 1];} } //陆地没处理则标注为新的岛屿 if (arr2[i][j] == 1){ num++; arr2[i][j] = num; } */ //递归调用寻找附近陆地 num++; arr2[i][j] = num; arrSearch(i, j, &arr2, arr2[i][j], m, n); } } } //输出岛屿数 printf("number:%d", num - 1); getchar(); return 0;}
可执行代码下载(VS2013控制台程序)
http://download.csdn.net/download/liangyanghui/9973141
阅读全文
0 0
- 冒险岛问题:划分岛屿与陆地(矩阵求四邻域个数问题)
- Island Perimeter 求四邻域有几个1的问题
- 华为OJ-岛屿个数问题
- 岛屿问题
- 岛屿问题
- 长江口陆地、岛屿变迁与沙地人迁徙史.doc
- 冒险岛 地址搜索问题
- 求表示方法(整数划分问题)
- 整数划分(四)+经典问题
- 求约数个数问题
- 岛屿周长问题(python3实现)
- 关于 win8.1 玩冒险岛问题
- 岛屿的个数(LintCode)
- 岛屿个数
- 求1的个数问题
- 求约数个数最多问题
- 经典问题四. (区间dp) 凸多边形最优三角形划分
- 雷达覆盖岛屿的问题
- CAS单点登录-https配置(四)
- luogu3384 【模板】树链剖分
- 计算机组成原理--CPU性能
- Linux基础命令
- 51nod 1732 51nod婚姻介绍所(LCS变形)
- 冒险岛问题:划分岛屿与陆地(矩阵求四邻域个数问题)
- pycharm写中文注释,编译不通过问题的解决方案
- HAOI2015 树上操作
- Java 中的 String 为什么是不可变的? 基础知识要扎实
- 做到这一点,你也可以成为优秀的程序员
- 系统配置相关
- 关联容器-map与pair的使用(续)
- VS2015断点调试快捷键
- 分析解讀北京賽車技巧六碼七碼計劃規律