算法分析与设计丨第十一周丨Sicily(15)—— 1003. 最近的0(Hard)
来源:互联网 发布:营销网络地图代码 编辑:程序博客网 时间:2024/06/08 06:43
题目描述:
输入一个N*M的01矩阵A,对矩阵的每个位置,求至少经过多少步可以到达一个0. 每一步可以往上下左右走一格.
请为下面的Solution类实现解决这一问题的函数nearestZero,函数参数A为给出的01矩阵,A的行数和列数均不大于100. 函数的返回值是问题的答案.
class Solution {
public:
vector<vector<int>> nearestZero(vector<vector<int>>& A) {
}
};
例如:
A=
1 1 1
0 1 1
0 0 1
答案为
1 2 3
0 1 2
0 0 1
题目解析:这次期中测试的题目,当时时间不够没有写出来,用广度优先搜索,注意放入队列当中的条件,还有matrix的设置。
// Problem#: 21103// Submission#: 5210377// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/// All Copyright reserved by Informatic Lab of Sun Yat-sen Universityclass Solution {public: vector<vector<int>> nearestZero(vector<vector<int> >& A) { int row_size = A.size(); if(row_size == 0) return A; int col_size = A[0].size(); vector<vector<int>> result(row_size,vector<int>(col_size,100000)); int position[4][2] = {{0,-1},{0,1},{1,0},{-1,0}}; queue<pair<int,int> > my_que; for(int i = 0; i < row_size; ++i) for(int j = 0; j < col_size; ++j) { if(A[i][j] == 0) { result[i][j] = 0; my_que.push({i,j}); } } while(!my_que.empty()) { pair<int,int> cur = my_que.front(); my_que.pop(); for(int i = 0; i < 4; ++i) { int next_row = cur.first + position[i][0],next_col = cur.second + position[i][1]; if(next_row >= 0 && next_col >= 0 && next_row < row_size && next_col < col_size) { if(result[next_row][next_col] > result[cur.first][cur.second] + 1) { result[next_row][next_col] = result[cur.first][cur.second] + 1; my_que.push({next_row,next_col}); } } } } return result; }};
阅读全文
1 0
- 算法分析与设计丨第十一周丨Sicily(15)—— 1003. 最近的0(Hard)
- 算法分析与设计丨第十周丨LeetCode(14)——Edit distance(Hard)
- 算法分析与设计丨第七周丨LeetCode(11)——Candy(Hard)
- 算法分析与设计第十一周
- 算法分析与设计丨第一周丨 LeetCode(1)——Two Sum
- 算法分析与设计丨第三周丨LeetCode(5)——Median of Two Sorted Arrays(Hard)
- 算法分析与设计丨第十七周丨LeetCode(21)——Binary Tree Maximum Path Sum(Hard)
- 算法设计与应用基础:第十一周(1)
- 第十一周算法分析与设计: Sort Colors
- 算法分析与设计丨第一周丨LeetCode(2)——Different Ways to Add Parentheses(Medium)
- 第十一周 leetcode 135. Candy(Hard)
- 算法分析与设计丨第十四周丨LeetCode(18)——Maximum Subarray(Medium)
- Stanford公开课之算法:设计与分析——(第一周) Programming Question-1
- 算法设计与应用基础:第十一周
- 算法设计与应用基础-第十一周
- 第十一周(类族的设计)
- 算法分析与设计——最近点对问题
- Stanford公开课之算法:设计与分析——II.渐进式分析(第一周)
- Linux下使用bufferevent实现tcp代理功能
- [零基础易语言教程]1-1 什么是易语言
- c++primer5 题3.36
- URI和URL的区别
- OPENCV 3. 图像的加载、保存与显示
- 算法分析与设计丨第十一周丨Sicily(15)—— 1003. 最近的0(Hard)
- SAS学习笔记(三)
- 生成窗口最大数值(每日一道算法题)
- spring源码学习之路---IOC实现原理(二)
- MySql进阶篇之命令大全
- 【云星数据---Apache Flink实战系列(精品版)】:Apache Flink高级特性与高级应用013-Flink在批处理中常见的sink和source001
- 数据结构笔记
- DataBinding介绍
- 生成微信二维码