我不明白???
#include<bits/stdc++.h>
using namespace std;
int n,qdi=-1,qdj=-1;
int fxi[]={0,0,-1,1},fxj[]={1,-1,0,0};
bool jz[1005][1005],bj[1005][1005];
priority_queue<int>ans;
struct zb{
int bs,i,j;
};
queue<zb>que;
bool brd()
{
char ch=getchar();
if(ch=='0')
return 0;
if(ch=='1')
return 1;
}
void bfs(int qi,int qj)
{
zb ls;
ls.bs=1,ls.i=qi,ls.j=qj;
bj[ls.i][ls.j]=1;
que.push(ls);
int re=1;
while(!que.empty())
{
ls=que.front();
for(int k=0;k<4;k++)
{
ls.i+=fxi[k],ls.j+=fxj[k],ls.bs++;
if(jz[ls.i][ls.j]==1&&bj[ls.i][ls.j]==0&&ls.i<=n&&ls.i>=1&&ls.j>=1&&ls.j<=n)
que.push(ls),bj[ls.i][ls.j]=1;
ls.i-=fxi[k],ls.j-=fxj[k],ls.bs--;
}
re=max(re,ls.bs);
que.pop();
}
ans.push(-re);
return ;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
char sb;
for(int j=1;j<=n;j++)
{
cin>>sb;
if(qdi==-1&&sb=='1')
qdi=i,qdj=j;
jz[i][j]=sb-'0';
}
}
for(int k=qdi*n+qdj;k<=n*n;k++)
{
int i=k/n,j=k-i*n;
if(jz[i][j]==1&&bj[i][j]==0)
bfs(i,j);//cout<<i<<" "<<j<<endl;
}
printf("%d\n",ans.size());
while(ans.size()>0)
printf("%d\n",(-ans.top())),ans.pop();
return 0;
}