#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;
}