90分求助,第二个点TLE了
  • 板块P1141 01迷宫
  • 楼主Mine_Yan
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/3/20 13:57
  • 上次更新2023/11/5 01:51:06
查看原帖
90分求助,第二个点TLE了
109706
Mine_Yan楼主2021/3/20 13:57
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath> 
#include<cstring>
using namespace std;
struct nod{
	int x,y;
}q[1000010];
int dt[1010][1010],fx[5][3]={{0,1},{0,-1},{1,0},{-1,0}};
int js,jl[1010][1010],ans[1000010][3],sum[1010][1010];
int bfs(int a,int b,int n)
{
	int j=1,k=1;
	q[1].x=a;q[1].y=b;
	while(j<=k)
	{
		for(int i=0;i<4;i++)
		if(dt[q[j].x+fx[i][0]][q[j].y+fx[i][1]]!=dt[q[j].x][q[j].y]&&jl[q[j].x+fx[i][0]][q[j].y+fx[i][1]]==0)
		if(q[j].x+fx[i][0]>0&&q[j].x+fx[i][0]<=n&&q[j].y+fx[i][1]>0&&q[j].y+fx[i][1]<=n)
		{
			k++;
			q[k].x=q[j].x+fx[i][0];
			q[k].y=q[j].y+fx[i][1];
			js++;ans[k][0]=q[k].x;ans[k][1]=q[k].y;
			jl[q[k].x][q[k].y]=1;
		}
		j++;
	}
	for(int i=1;i<=k;i++)
	sum[ans[i][0]][ans[i][1]]=js;
	return 0;
}
int main()
{
	int n,m,a,b;
	char p;
	cin>>n>>m;
	memset(ans,0,sizeof(ans));
	memset(sum,-1,sizeof(sum));
	for(int i=1;i<=n;i++)
	for(int j=1;j<=n;j++)
	{
		cin>>p;
		dt[i][j]=p-'0';
	}
	for(int i=1;i<=m;i++)
	{
		scanf("%d %d",&a,&b);
		if(sum[a][b]!=-1)
		{
			cout<<sum[a][b]<<endl;
			continue;
		}
		js=1;memset(jl,0,sizeof(jl));
		jl[a][b]=1;ans[1][0]=a;ans[1][1]=b;
		bfs(a,b,n);
		cout<<js<<endl;
	}
	return 0;
}
2021/3/20 13:57
加载中...