鱼C论坛

 找回密码
 立即注册
查看: 1701|回复: 0

[技术交流] LeetCode 200.岛屿数量

[复制链接]
发表于 2020-2-7 15:55:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 798236606 于 2020-3-4 17:23 编辑

传送门:https://leetcode-cn.com/problems/number-of-islands/

解:
1.深度优先遍历(C)
  1. void DFS(int x, int y, char** grid, int nr, int nc)
  2. {
  3.     ++grid[x][y];

  4.     if (x - 1 >= 0 && grid[x - 1][y] == '1') DFS(x - 1, y, grid, nr, nc);
  5.     if (x + 1 < nr && grid[x + 1][y] == '1') DFS(x + 1, y, grid, nr, nc);
  6.     if (y - 1 >= 0 && grid[x][y - 1] == '1') DFS(x, y - 1, grid, nr, nc);
  7.     if (y + 1 < nc && grid[x][y + 1] == '1') DFS(x, y + 1, grid, nr, nc);
  8. }

  9. int numIslands(char** grid, int gridSize, int* gridColSize)
  10. {
  11.     if (!grid || !gridSize || !*gridColSize) return 0;
  12.    
  13.     int num = 0;
  14.     for (int i = 0; i < gridSize; ++i)
  15.         for (int j = 0; j < *gridColSize; ++j)
  16.             if (grid[i][j] == '1' && ++num)
  17.                 DFS(i, j, grid, gridSize, *gridColSize);              
  18.    
  19.     return num;
  20. }
复制代码


2.广度优先遍历(C++)
  1. class Solution {
  2. public:      
  3.     void BFS(int x, int y, vector< vector<char> > &grid, int nr, int nc)
  4.     {
  5.         queue< pair<int, int> > q;

  6.         q.push({x, y});
  7.         while (!q.empty())
  8.         {
  9.             x = q.front().first, y = q.front().second;
  10.             q.pop();
  11.             
  12.             if (x - 1 >= 0 && grid[x - 1][y] == '1' && ++grid[x - 1][y]) q.push({x - 1, y});
  13.             if (x + 1 < nr && grid[x + 1][y] == '1' && ++grid[x + 1][y]) q.push({x + 1, y});
  14.             if (y - 1 >= 0 && grid[x][y - 1] == '1' && ++grid[x][y - 1]) q.push({x, y - 1});
  15.             if (y + 1 < nc && grid[x][y + 1] == '1' && ++grid[x][y + 1]) q.push({x, y + 1});
  16.         }
  17.     }
  18.    
  19.     int numIslands(vector< vector<char> > &grid)
  20.     {
  21.         if (!grid.size()) return 0;
  22.         
  23.         int nr = grid.size(), nc = grid[0].size(), num = 0;
  24.         for (int i = 0; i < nr; ++i)
  25.             for (int j = 0; j < nc; ++j)
  26.                 if (grid[i][j] == '1' && ++num)
  27.                     BFS(i, j, grid, nr, nc);
  28.         
  29.         return num;
  30.     }
  31. };
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-1 08:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表