TLE求助,怎么优化
查看原帖
TLE求助,怎么优化
216352
SUPERLWR楼主2021/8/19 11:15
#include<bits/stdc++.h>
using namespace std;
int m,x,y,t,g[305][305],f[305][305],visit[305][305];
struct zb{
	int x,y;
};
int main()
{
	std::ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	queue<zb> q;
	cin>>m;
	for(int i=0;i<=304;i++)
		for(int j=0;j<=304;j++)
			g[i][j]=-1;
		
	for(int i=1;i<=m;i++)
	{
		cin>>x>>y>>t;
		if(g[x][y]==-1||g[x][y]>t)
			g[x][y]=t;
		if(g[x+1][y]==-1||g[x+1][y]>t)
			g[x+1][y]=t;
		if(g[x][y+1]==-1||g[x][y+1]>t)
			g[x][y+1]=t;
		if(x-1>=0)
		if(g[x-1][y]==-1||g[x-1][y]>t)
			g[x-1][y]=t;
		if(y-1>=0)
		if(g[x][y-1]==-1||g[x][y-1]>t)
			g[x][y-1]=t;
		/*for(int k=0;k<=5;k++)
		{
			for(int j=0;j<=5;j++) 
				printf("%-4d",g[k][j]);
			cout<<endl;
		}*/
	}
	zb now;
	now.x=0;now.y=0;
	q.push(now);
	visit[0][0]=1;
	int xx,yy;
	while(!q.empty())
	{
		now=q.front();
		q.pop();
		xx=now.x,yy=now.y;
		//cout<<"坐标:"<<xx<<" "<<yy<<"步数:"<<f[xx][yy]<<"\n";
		if(g[xx][yy]==-1)
		{
		//	cout<<"\n跳出\n"; 
			break;
		}
		
		
		if(f[xx][yy]<g[xx+1][yy]-1&&!visit[xx+1][yy]||g[xx+1][yy]==-1)
		{
			visit[xx+1][yy]=1;
			zb tmp;
			tmp.x=xx+1;tmp.y=yy;
			q.push(tmp);
			f[xx+1][yy]=f[xx][yy]+1;
		//	cout<<"下\n";
		}
		if(xx-1>=0)
		if(f[xx][yy]<g[xx-1][yy]-1&&!visit[xx-1][yy]||g[xx-1][yy]==-1)
		{
			visit[xx][yy+1]=1;
			zb tmp;
			tmp.x=xx;tmp.y=yy;
			q.push(tmp);
			f[xx-1][yy]=f[xx][yy]+1;
		//	cout<<"上\n";
		}
		if(f[xx][yy]<g[xx][yy+1]-1&&!visit[xx][yy+1]||g[xx][yy+1]==-1)
		{
			visit[xx-1][yy]=1;
			zb tmp;
			tmp.x=xx;tmp.y=yy+1;
			q.push(tmp);
			f[xx][yy+1]=f[xx][yy]+1;
		//	cout<<"右\n";
		}
		if(yy-1>=0)
		if(f[xx][yy]<g[xx][yy-1]-1&&!visit[xx][yy-1]||g[xx][yy-1]==-1)
		{
			visit[xx][yy-1]=1;
			zb tmp;
			tmp.x=xx;tmp.y=yy-1;
			q.push(tmp);
			f[xx][yy-1]=f[xx][yy]+1;
		//	cout<<"左\n";
		}
	}
	if(g[xx][yy]==-1)
		cout<<f[xx][yy];
	else
	cout<<-1;
	return 0;
}

debug时候的注释没删,请忽略

2021/8/19 11:15
加载中...