bfs wa 求助qaq
查看原帖
bfs wa 求助qaq
390730
bnu20zhaojiankun楼主2020/11/27 16:15
#include<bits/stdc++.h>
using namespace std;
int n,m,num,d=0;
int a[300][300];
int c[100000];
int dir[4][2]={{-1,0},{0,-1},{1,0},{0,1}};
#define check(x,y)(x<n&&x>=0&&y<m&&y>=0)
struct node {int x,y;};
void bfs(int dx,int dy){
	++d;
	a[dx][dy]=0;
	num=1;
	queue<node>q;
	node start,next;
	start.x=dx;
	start.y=dy;
	q.push(start);
	while(!q.empty()){
		start=q.front();
		q.pop();
		for(int i=0;i<4;i++){
			next.x=start.x+dir[i][0];
			next.y=start.y+dir[i][1];
			if(check(next.x,next.y)&&a[next.x][next.y]==1){
				q.push(next);
				num++;
				a[next.x][next.y]=0;
			}
		}
	}c[d]=num;
}
int main(){
	scanf("%d%d",&n,&m);
	while(n!=0&&m!=0){
		memset(c,0,sizeof(a));
		d=0;
		for (int i=0;i<n;i++){
			for(int j=0;j<m;j++){
				scanf("%d",&a[i][j]);
			}
		}
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			if (a[i][j]==1)bfs(i,j);
		}
	}
	sort(c+1,c+d+1);
	for(int i=1;i<=d;i++){
		int r=c[i];
		int k=1;
		while(c[i]==c[i+1]){
			i++;
			k++;
		}
		printf("%d %d\n",r,k);
	}
	scanf("%d%d",&n,&m);}
	return 0;
}
2020/11/27 16:15
加载中...