当前位置:   article > 正文

leetcode 417. 太平洋大西洋水流问题(C++)

leetcode 417. 太平洋大西洋水流问题(C++)

给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度。“太平洋”处于大陆的左边界和上边界,而“大西洋”处于大陆的右边界和下边界。

规定水流只能按照上、下、左、右四个方向流动,且只能从高到低或者在同等高度上流动。

请找出那些水流既可以流动到“太平洋”,又能流动到“大西洋”的陆地单元的坐标。

 

提示:

  1. 输出坐标的顺序不重要
  2. m 和 n 都小于150

 

示例:

 

给定下面的 5x5 矩阵:

  太平洋 ~   ~   ~   ~   ~ 
       ~  1   2   2   3  (5) *
       ~  3   2   3  (4) (4) *
       ~  2   4  (5)  3   1  *
       ~ (6) (7)  1   4   5  *
       ~ (5)  1   1   2   4  *
          *   *   *   *   * 大西洋

返回:

[[0, 4], [1, 3], [1, 4], [2, 2], [3, 0], [3, 1], [4, 0]] (上图中带括号的单元).

C++

  1. class Solution {
  2. public:
  3. void bfs(queue<pair<int,int>>& que, vector<vector<int>>& flag, vector<vector<int>>& matrix) {
  4. int dx[]={0,0,1,-1};
  5. int dy[]={1,-1,0,0};
  6. while(!que.empty()) {
  7. auto it=que.front();
  8. que.pop();
  9. int i=it.first;
  10. int j=it.second;
  11. for(int k=0;k<4;k++) {
  12. int y=i+dy[k];
  13. int x=j+dx[k];
  14. if(y>=0 && y<matrix.size() && x>=0 && x<matrix[0].size() && 0==flag[y][x] && matrix[y][x]>=matrix[i][j]) {
  15. flag[y][x]=1;
  16. que.push({y,x});
  17. }
  18. }
  19. }
  20. }
  21. vector<vector<int>> pacificAtlantic(vector<vector<int>>& matrix) {
  22. vector<vector<int>> res;
  23. if(0==matrix.size() || 0==matrix[0].size()) {
  24. return res;
  25. }
  26. int m=matrix.size();
  27. int n=matrix[0].size();
  28. vector<vector<int>> flag(m,vector<int>(n,0));
  29. queue<pair<int,int>> que;
  30. for(int i=0;i<m;i++) {
  31. flag[i][0]=1;
  32. que.push({i,0});
  33. }
  34. for(int i=1;i<n;i++) {
  35. flag[0][i]=1;
  36. que.push({0,i});
  37. }
  38. bfs(que,flag,matrix);
  39. vector<vector<int>> vec(m,vector<int>(n,0));
  40. for(int i=0;i<m;i++) {
  41. vec[i][n-1]=1;
  42. que.push({i,n-1});
  43. }
  44. for(int i=0;i<n-1;i++) {
  45. vec[m-1][i]=1;
  46. que.push({m-1,i});
  47. }
  48. bfs(que,vec,matrix);
  49. for(int i=0;i<m;i++) {
  50. for(int j=0;j<n;j++) {
  51. if(flag[i][j] && vec[i][j]) {
  52. res.push_back({i,j});
  53. }
  54. }
  55. }
  56. return res;
  57. }
  58. };

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/146468
推荐阅读
相关标签
  

闽ICP备14008679号