萌新求助,总是只过2个点
查看原帖
萌新求助,总是只过2个点
85962
pure__Elysia楼主2022/8/22 12:24

我不明白???

#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;
}
2022/8/22 12:24
加载中...