#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分
希望大家帮我优化一下
希望大家能看懂我的代码(真奇怪!!!)