30分BFS求助
查看原帖
30分BFS求助
467443
A宋锦瑞A楼主2022/7/22 16:52

代码

#include<bits/stdc++.h>

using namespace std;

struct node {
	int x,y;
	int step;
};

int n,m,x;
char mp[1001][1001];
bool v[1001][1001];
int ans[100001];
int fx[4][2]= {1,0,0,1,-1,0,0,-1};

int bfs(int x,int y) {
	int maxn=1;
	queue<node>q;
	node a,b;
	q.push({x,y,1});
	while(q.size()!=0) {
		a=q.front();
		q.pop();
		maxn=max(maxn,a.step);
		for(int i=0; i<4; i++) {
			b.x=a.x+fx[i][0];
			b.y=a.y+fx[i][1];
			if(b.x>=0&&b.y>=0&&b.x<n&&b.y<n&&v[b.x][b.y]==0&&mp[b.x][b.y]=='1') {
				b.step=a.step+1;
				v[b.x][b.y]=1;
				q.push(b);
			}
		}
	}
	return maxn;
}

int main() {
	cin>>n;
	for(int i=0; i<n; i++) {
		for(int j=0; j<n; j++) {
			cin>>mp[i][j];
		}
	}
	for(int i=0; i<n; i++) {
		for(int j=0; j<n; j++) {
			if(mp[i][j]=='1'&&v[i][j]==0) {
				ans[m++]=bfs(i,j);
			}
		}
	}
	sort(ans,ans+m);
	cout<<m<<endl;
	for(int i=0; i<m; i++) {
		cout<<ans[i]<<endl;
	}

	return 0;
}
2022/7/22 16:52
加载中...