数岛屿
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) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
以上是关于数岛屿的主要内容,如果未能解决你的问题,请参考以下文章