数岛屿

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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  

posted @   zzas12345  阅读(189)  评论(1编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示