BFS:
#include<cstdio>
#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn=101;
int n,m,matrix[maxn][maxn]={0};
int X[4]={0,0,1,-1};
int Y[4]={1,-1,0,0};
bool inq[maxn][maxn]={false};
struct node
{
int x, y;
};
bool test(int x,int y)
{
if(x>=n||x<0||y>=m||y<0)return false;
else if(inq[x][y]==true||matrix[x][y]==0)return false;
else return true;
}
void BFS(int x,int y)
{
queue<node> q;
node temp;
temp.x=x,temp.y=y;
q.push(temp);
inq[x][y]=true;
while(!q.empty())
{
node top=q.front();
q.pop();
for(int i=0;i<4;i++)
{
int newX=top.x+X[i];
int newY=top.y+Y[i];
if(test(newX,newY))
{
temp.x=newX;
temp.y=newY;
q.push(temp);
inq[newX][newY]=true;
}
}
}
}
int main()
{
cin>>n>>m;
int x,y;
for (int i=0;i<n;i++)
{
for (int j=0;j<m;j++)
{
scanf("%d",&matrix[i][j]);
}
}
int ans=0;
for (int i=0;i<n;i++)
{
for (int j=0;j<m;j++)
{
if(inq[i][j]==false&&matrix[i][j]==1)
{
BFS(i,j);
ans++;
}
}
}
printf("%d",ans);
}
DFS
#include<cstdio>
#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn=101;
int n,m,matrix[maxn][maxn]={0};
int X[4]={0,0,1,-1};
int Y[4]={1,-1,0,0};
bool inq[maxn][maxn]={false};
struct node
{
int x, y;
};
bool test(int x,int y)
{
if(x>=n||x<0||y>=m||y<0)return false;
else if(inq[x][y]==true||matrix[x][y]==0)return false;
else return true;
}
void DFS(int x,int y)
{
if(test(x,y)==false) return ;
inq[x][y]=true;
for (int i=0;i<4;i++)
{
int newX=x+X[i];
int newY=y+Y[i];
DFS(newX,newY);
}
}
int main()
{
cin>>n>>m;
int x,y;
for (int i=0;i<n;i++)
{
for (int j=0;j<m;j++)
{
scanf("%d",&matrix[i][j]);
}
}
int ans=0;
for (int i=0;i<n;i++)
{
for (int j=0;j<m;j++)
{
if(inq[i][j]==false&&matrix[i][j]==1)
{
DFS(i,j);
ans++;
}
}
}
printf("%d",ans);
}