数岛屿

Posted zzas0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数岛屿相关的知识,希望对你有一定的参考价值。

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

  

以上是关于数岛屿的主要内容,如果未能解决你的问题,请参考以下文章

DFS 算法秒杀岛屿系列题目

华为机试真题 Java 实现最大岛屿体积

岛屿问题(岛数量/孤岛/面积/周长)

岛屿问题(岛数量/孤岛/面积/周长)

岛屿问题(岛数量/孤岛/面积/周长)

DFS求岛屿最大面积