c++ - TLE 在查找岛屿数 (GFG)
问题描述
我在问题中找到了 TLE,找不到该岛。链接到问题 - https://practice.geeksforgeeks.org/problems/find-the-number-of-islands/1/?track=md-graph&batchId=144 我的方法是简单地使用 DFS 并查找组件(土地)从陆地开始计算组件的编号并返回。这是我的代码
#include<bits/stdc++.h>
using namespace std;
bool issafe(int i,int j ,int n,int m, vector<vector<char>>graph)
{
if(i<0 || i>n-1 || j<0 || j>m-1 || graph[i][j]=='0')
return false;
return true;
}
void DFS(int u,int v, vector<vector<char>>& grid,int n,int m,vector<vector<int>>& vis)
{
static int row[]={-1,0,0,1,-1,-1,1,1 };//up,left,right,down, upper left, upper, right, lower left, lower right;
static int col[]={0,-1,1,0,-1,1,-1,1 };
vis[u][v]=1;
for(int k=0;k<8;k++)
{
if(issafe(u+row[k],v+col[k],n,m,grid) && !vis[u+row[k]][v+col[k]] )
{
DFS(u+row[k], v+col[k], grid, n, m, vis);
}
}
}
int numIslands(vector<vector<char>>& grid)
{
int n=grid.size(),m=grid[0].size();
vector<vector<int>>vis(n,vector<int>(m,0));
int ans=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(vis[i][j]==0 && grid[i][j]!='0')
{
DFS(i,j,grid,n,m,vis);
ans++;
}
}
}
return ans;
}
解决方案
一项更改是您不希望有额外的空间来标记已访问或未访问。我们可以grid
通过将其标记为 say 来自行完成grid[i][j] = '0'
。
class Solution
{
public:
//Function to find the number of islands.
int numIslands(vector<vector<char>>& grid) {
if (grid.size() == 0)
return 0;
int islands = 0;
int row = grid.size();
int col = grid[0].size();
for (int i=0; i<row; i++) {
for (int j=0; j<col; j++) {
if (grid[i][j] == '1')
islands += helper(grid, i, j);
}
}
return islands;
}
int helper(vector<vector<char>>& grid, int i, int j) {
if (i<0 || j<0 || i>=grid.size() || j>=grid[0].size() || grid[i][j] == '0')
return 0;
grid[i][j] = '0';
helper(grid, i, j-1);
helper(grid, i, j+1);
helper(grid, i-1, j);
helper(grid, i+1, j);
helper(grid, i+1, j+1);
helper(grid, i+1, j-1);
helper(grid, i-1, j+1);
helper(grid, i-1, j-1);
return 1;
}
};
这是岛屿数量的公认版本。
推荐阅读
- c++ - 无法在带有 VS2017 的 Windows 10 上安装和使用 gRPC C/C++
- javascript - React中使用超时的无限for循环
- jenkins - 获取 Jenkins 工作区编号
- java - 有没有办法混合 AndroidX 和使用支持库的子项目?
- vba - 在 Outlook 中使用共享邮箱时是否可以阻止访问电子邮件?
- protractor - 我已经在本地安装了量角器,但它仍然指向全局实例
- r - 如何根据条件选择R数据框中的连续行?
- go - 想在单元测试Golang中添加一个FormFile
- php - 访问 PHP 方法中定义的函数内的属性
- c# - 如何在C#中将字符串转换为double