请求优化
查看原帖
请求优化
174863
2018g20楼主2021/1/4 19:22
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
struct node
{
	int x,y;
};
struct cmp
{
	bool operator ()(node a,node b)
	{
		if(a.x!=b.x) return a.x>b.x;
		else return a.y>b.y;
	}
};
node p,l,p1;
int x1[9]={0,-1,-1,0,1,1,1,0,-1};
int y1[9]={0,0,1,1,1,0,-1,-1,-1};
int n,m,cnt,ans;
char c;
queue <node> lei;
priority_queue <node,vector<node>,cmp> q;
int main()
{
	scanf("%d %d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>c;
			if(c=='*')
			{
				p.x=i;
				p.y=j;
				lei.push(p);
				for(int k=1;k<=8;k++)
				{
					p.x=i+x1[k];
					p.y=j+y1[k];
					if(p.x>0&&p.x<=n&&p.y>0&&p.y<=m) q.push(p);
				}
			}
		}
	}
	if(!q.empty()) p=q.top();
	l=lei.front();
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(l.x==i&&l.y==j)
			{
				printf("*");
				lei.pop();
				if(!lei.empty()) l=lei.front();
				goto end;
			}
			while(p.x==i&&p.y==j)
			{
				q.pop();
				cnt++;
				if(q.empty()) break;
				p=q.top();
			}
			printf("%d",cnt);
			cnt=0;
			if(0)
			{
				end:;
				while(p.x==i&&p.y==j)
				{
					q.pop();
					p=q.top();
				}
			}
		}
		printf("\n"); 
	}
	return 0;
}

TLE了,80分

希望大家帮我优化一下

希望大家能看懂我的代码(真奇怪!!!)

2021/1/4 19:22
加载中...