RT,它炸了。
测试时很后面才出错。
#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
struct node
{
int x,y,val;
};
bool can_go[1002][1002];
bool visited[1002][1002];
int dx[]={0,0,0,1,-1};
int dy[]={0,1,-1,0,0};
int bfs(int sx,int sy)
{
queue<node> q;
q.push({sx,sy,1});
int ans=1;
while(!q.empty())
{
node tmp=q.front();q.pop();
for(int i=1;i<=4;i++)
{
if(visited[tmp.x+dx[i]][tmp.y+dy[i]]||(!can_go[tmp.x+dx[i]][tmp.y+dy[i]]))continue;
visited[tmp.x+dx[i]][tmp.y+dy[i]]=1;
q.push({tmp.x+dx[i],tmp.y+dy[i],tmp.val+1});
}
ans=tmp.val;
}
return ans;
}
int vals[1000001];
int main()
{
int n;cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
char tmp;cin>>tmp;
can_go[i][j]=tmp-'0';
}
}
for(int i=1;i<=n;i++)visited[i][0]=visited[0][i]=visited[n+1][i]=visited[i][n+1]=1;
int cnt=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(visited[i][j]==0&&can_go[i][j])vals[++cnt]=bfs(i,j);
}
}
sort(vals+1,vals+1+cnt);
cout<<cnt<<'\n';
for(int i=1;i<=cnt;i++)cout<<vals[i]<<'\n';
return 0;
}