BFS 最少块数
#include<bits/stdc++.h>
using namespace std;
const int Max=100;
int M[Max][Max];
int m,n;
bool a[Max][Max]= {0};
int X[4]= {0,0,1,-1};
int Y[4]= {1,-1,0,0};
struct node {
int x,y;
node(int a,int b):x(a),y(b) {
}
};
bool Judge(int x,int y) {
if(x<0||x>=n||y<0||y>=m) {
return 0;
}
if(M[x][y]==0||a[x][y]==1) {
return 0;
}
return 1;
}
void BFS(int x,int y) {
queue<node> q;
node n(x,y);
q.push(n);
a[x][y]=1;
while(!q.empty()) {
node b=q.front();
q.pop();
for(int i=0; i<4; i++) {
int newx=b.x+X[i];
int newy=b.y+Y[i];
if(Judge(newx,newy)) {
q.push(node(newx,newy));
a[newx][newy]=1;
}
}
}
return ;
}
int main() {
while(cin>>n>>m) {
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
cin>>M[i][j];
}
}
int answer=0;
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
if(M[i][j]==1&&a[i][j]==0) {
BFS(i,j);
answer++;
}
}
}
cout<<answer<<endl;
}
return 0;
}
using namespace std;
const int Max=100;
int M[Max][Max];
int m,n;
bool a[Max][Max]= {0};
int X[4]= {0,0,1,-1};
int Y[4]= {1,-1,0,0};
struct node {
int x,y;
node(int a,int b):x(a),y(b) {
}
};
bool Judge(int x,int y) {
if(x<0||x>=n||y<0||y>=m) {
return 0;
}
if(M[x][y]==0||a[x][y]==1) {
return 0;
}
return 1;
}
void BFS(int x,int y) {
queue<node> q;
node n(x,y);
q.push(n);
a[x][y]=1;
while(!q.empty()) {
node b=q.front();
q.pop();
for(int i=0; i<4; i++) {
int newx=b.x+X[i];
int newy=b.y+Y[i];
if(Judge(newx,newy)) {
q.push(node(newx,newy));
a[newx][newy]=1;
}
}
}
return ;
}
int main() {
while(cin>>n>>m) {
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
cin>>M[i][j];
}
}
int answer=0;
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
if(M[i][j]==1&&a[i][j]==0) {
BFS(i,j);
answer++;
}
}
}
cout<<answer<<endl;
}
return 0;
}