leetcode 200. 岛屿数量

35 篇文章 0 订阅
#include<vector>
#include<iostream>
#include<string>
using namespace std;
/**
leetcode 200. 岛屿数量
图的深度优先遍历   DFS   使用栈的数据结构或者递归算法实现

算法:
    遍历二维矩阵中的每个元素,如果当前位置的字符是'1',则count_num++
    并使用深度优先遍历的将当前位置邻域的所有位置的字符全部都变成'0'
    再依次向后扫描
**/


class Solution {
public:
    int numIslands(vector<vector<char> >& grid) {
        int count_num=0;
        for(unsigned int i=0;i<grid.size();i++){
            for(unsigned int j=0;j<grid[0].size();j++){
                  if(grid[i][j]=='1'){
                      count_num++;
                      this->set_zero(grid,i,j);
                  }
            }
        }
        return count_num;
    }
    void set_zero(vector<vector<char> >& grid,int i,int j){
        if(i<0 or i>=grid.size()){
            return;
        }
        if(j<0 or j>=grid[0].size()){
            return;
        }
        if(grid[i][j]=='0'){
            return;
        }
        else{
            grid[i][j]='0';
            this->set_zero(grid,i,j-1);
            this->set_zero(grid,i,j+1);
            this->set_zero(grid,i-1,j);
            this->set_zero(grid,i+1,j);
        }
        return;
    }
};

char int2char(int i){
    if(i==0){
        return '0';
    }
    else{
        return '1';
    }

}

int main(){
    // 11110
//    11010
//    11000
//    00000
    int a[]={1,1,1,1,0};
    int b[]={1,1,0,1,0};
    int c[]={1,1,0,0,0};
    int d[]={0,0,0,0,0};

    vector<char> a1;
    for(unsigned int i=0;i<5;i++){
        a1.push_back(int2char(a[i]));
    }
    vector<char> b1;
    for(unsigned int i=0;i<5;i++){
        b1.push_back(int2char(b[i]));
    }

    vector<char> c1;
    for(unsigned int i=0;i<5;i++){
        c1.push_back(int2char(c[i]));
    }

    vector<char> d1;
    for(unsigned int i=0;i<5;i++){
        d1.push_back(int2char(d[i]));
    }

//    vector<int> e1;
//    for(unsigned int i=0;i<5;i++){
//        e1.push_back(e[i]);
//    }


    vector<vector<char> > inputs;
    inputs.push_back(a1);
    inputs.push_back(b1);
    inputs.push_back(c1);
    inputs.push_back(d1);
//    inputs.push_back(e1);

    Solution s;

    cout<<s.numIslands(inputs)<<endl;

    return 0;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值