一个二维矩阵,里面只有0和1,问怎样求指定某一个格与它数字相同的连通格子个数
2016-03-18 11:08
274 查看
一个二维矩阵,里面只有0和1,问怎样求指定某一个格与它数字相同的连通格子个数
记录一下 感觉效率不高
int iter(int x, int y, vector<vector<int>>& nums, vector<vector<int>>& dp){
int lenX = nums.size();
int lenY = nums[0].size();
if (x < 0 || x >= lenX || y < 0 || y >= lenY)
return 0;
if (dp[x][y] == 1 || nums[x][y] == 0)
return 0;
dp[x][y] = 1;
int left = iter(x, y - 1, nums, dp);
int right = iter(x, y + 1, nums, dp);
int up = iter(x - 1, y, nums, dp);
int down = iter(x + 1, y, nums, dp);
return 1 + left + right + up + down;
}
int numsOfOnes(int x, int y, vector<vector<int>>& nums){
vector<int> zeros(nums[0].size(), 0);
vector<vector<int>> dp(nums.size(),zeros);
return iter(x, y, nums, dp);
}
记录一下 感觉效率不高
int iter(int x, int y, vector<vector<int>>& nums, vector<vector<int>>& dp){
int lenX = nums.size();
int lenY = nums[0].size();
if (x < 0 || x >= lenX || y < 0 || y >= lenY)
return 0;
if (dp[x][y] == 1 || nums[x][y] == 0)
return 0;
dp[x][y] = 1;
int left = iter(x, y - 1, nums, dp);
int right = iter(x, y + 1, nums, dp);
int up = iter(x - 1, y, nums, dp);
int down = iter(x + 1, y, nums, dp);
return 1 + left + right + up + down;
}
int numsOfOnes(int x, int y, vector<vector<int>>& nums){
vector<int> zeros(nums[0].size(), 0);
vector<vector<int>> dp(nums.size(),zeros);
return iter(x, y, nums, dp);
}
相关文章推荐
- dubbo——管理员指南
- JavaScript 钩子机制
- 安防音频
- iOS:iOS开发系列–打造自己的“美图秀秀”(下)
- 搜索技巧总结
- 大数据架构文章整理
- oracle 11g dataguard 出现ORA-16143: 终端恢复过程中或之后不允许进行 RFS 连接解决方法
- eclipse run提示错误解决办法: Native library for Attach API not available in this JRE
- Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法
- MP4不是流媒体格式
- caffe&windows工作过程 — cifar10为例
- 浅谈C++ 虚函数列表
- Hadoop MapReduce框架详解
- android viewpager 无限左右滑动
- Sql 存储过程动态添加where条件
- Linux的文件-笔记
- 区别 #include
- Java集合框架:Set(HashSet,LinkedHashSet,TreeSet)
- MySQL主主复制实战
- 在Hibernate Validator 4.1+中,@NotNull, @NotEmpty和@NotBlank之间的区别是什么?