码迷,mamicode.com
首页 > 其他好文 > 详细

数岛屿

时间:2020-05-05 17:43:17      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:mis   problem   思路   res   一个   dex   vector   map   https   

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

  

数岛屿

标签:mis   problem   思路   res   一个   dex   vector   map   https   

原文地址:https://www.cnblogs.com/zzas0/p/12831352.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!