47个用例过了42 ,用了一个图色彩的方法,标记图书,然后调过,调用栈过长,肯能要优化一下
附录GDB 调试的源码
#include <vector>
#include<iostream>
using namespace std;
class Solution {
bool Inmap(int i ,int j,vector<vector<char> >& grid){
if(i < 0 || j < 0) return false;
if(i == grid.size() || j == grid[0].size()) return false;
return true;
}
void display(vector<vector<char> >& grid){
for(int i=0;i<grid.size();i++){
for(int j = 0;j<grid[0].size();j++){
std::cout<<grid[i][j];
}
std::cout<<endl;
}
}
void Map(vector<vector<char> >& grid,int i,int j,int &num){
if(grid[i][j]){
if(Inmap(i+1,j,grid) && grid[i+1][j] == '1')
{
grid[i+1][j] = num;
Map(grid,i+1,j,num);
}
if(Inmap(i,j+1,grid) && grid[i][j+1] == '1' )
{
grid[i][j+1] = num;
Map(grid,i,j+1,num);
}
if( Inmap(i,j-1,grid) && grid[i][j-1] == '1')
{
grid[i][j-1] = num;
Map(grid,i,j-1,num);
}
if( Inmap(i-1,j,grid) && grid[i-1][j] == '1')
{
grid[i-1][j] = num;
Map(grid,i-1,j,num);
}
display(grid);
}
}
public:
int numIslands(vector<vector<char>>& grid) {
int num=1;
for(int i=0;i<grid.size();i++){
for(int j = 0;j<grid[0].size();j++){
if(grid[i][j]=='1'){
num+=1;
Map(grid,i,j,num);
display(grid);
}
else continue;
}
}
return (num-1);
}
};
int main()
{
vector<vector<char>> grid= {{'1','1','1','1','0'},{'1','1','0','1','0'},{'1','1','0','0','0'},{'0','0','0','0','0'}};
Solution s;
int result =s.numIslands(grid);
return 0;
}
偷一个大佬的答案,可以学习一下方向控制,大体思路估计是一样的
class Solution {
void dfs(vector<vector<char>> &grid,int cur_i,int cur_j)
{
if(cur_i<0||cur_i==grid.size()||cur_j<0||cur_j==grid[0].size()||grid[cur_i][cur_j]=='0') return;
grid[cur_i][cur_j]='0';
int di[4]={0,0,1,-1};
int dj[4]={1,-1,0,0};
for(int index=0;index<4;index++)
{
dfs(grid,cur_i+di[index],cur_j+dj[index]);
}
return;
}
public:
int numIslands(vector<vector<char>>& grid) {
int ans=0;
for(int i=0;i<grid.size();i++)
{
for(int j=0;j<grid[0].size();j++)
{
if(grid[i][j]=='1')
{
ans++;
dfs(grid,i,j);
}
}
}
return ans;
}
};
作者:shang-hai-chao
链接:https://leetcode-cn.com/problems/number-of-islands/solution/po-shi-wu-hua-de-shen-du-you-xian-bian-li-by-shang/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
来源:oschina
链接:https://my.oschina.net/u/4259287/blog/4268305