#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<string>
using namespace std;
const int INF=0x3f3f3f3f;
const int MAXN=105;
const int MAXM=105;
int n,m,i;
int done[MAXN][MAXM];
int sx,sy,ex,ey;
char map[MAXN][MAXM];
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
int en,p[MAXN][MAXM];
struct node
{
int x,y,w,id,pre;
node(int xx=0,int yy=0,int ww=0,int i=0,int pr=0)
{
x=xx;y=yy;w=ww;id=i;pre=pr;
}
friend bool operator<(const node &a,const node &b)
{
return a.w>b.w;
}
}que[10010];
bool is_ill(int x,int y)
{
if(x<0||x>=n||y<0||y>=m)return 1;
return 0;
}
int bfs()
{
priority_queue<node> q;
en=0;
que[en].x=0,que[en].y=-1,que[en].w=-1;
que[en].pre=-1;
q.push(que[en++]);
memset(done,0,sizeof(done));
while(!q.empty())
{
node e=q.top();
q.pop();
for(int i=0;i<4;i++)
{
int x=e.x+dx[i];
int y=e.y+dy[i];
if(!is_ill(x,y)&&!done[x][y]&&map[x][y]!='X')
{
que[en].x=x;
que[en].y=y;
que[en].id=en;
que[en].w=e.w+(map[x][y]=='.'?1:map[x][y]-'0'+1);
que[en].pre=e.id;
if(x==n-1 && y==m-1)
return en;
q.push(que[en++]);
done[x][y]=1;
}
}
}
return -1;
}
void showpath(int id)
{
int pre=que[id].pre;
int x=que[id].x;
int y=que[id].y;
int px=que[pre].x;
int py=que[pre].y;
if(que[id].pre==1)
{
printf("%ds:(%d,%d)->(%d,%d)\n",que[pre].w+1,px,py,x,y);
if(map[x][y]!='.')
{
int w=map[x][y]-'0';
for(int i=1;i<=w;i++)
printf("%ds:FIGHT AT (%d,%d)\n",que[pre].w+i+1,x,y);
}
}
else
{
showpath(pre);
printf("%ds:(%d,%d)->(%d,%d)\n",que[pre].w+1,px,py,x,y);
if(map[x][y]!='.')
{
int w=map[x][y]-'0';
for(int i=1;i<=w;i++)
printf("%ds:FIGHT AT (%d,%d)\n",que[pre].w+i+1,x,y);
}
}
}
int main()
{
//freopen("123.txt","r",stdin);
while(~scanf("%d%d\n",&n,&m))
{
for(i=0;i<n;i++)
gets(map[i]);
sx=sy=0;
ex=n-1;ey=m-1;
int ans;
if(map[0][0]=='X'||map[n-1][m-1]=='X')ans=-1;
else ans=bfs();
if(ans>=0)
{
printf("It takes %d seconds to reach the target position, let me show you the way.\n",que[ans].w);
showpath(ans);
}
else printf("God please help our poor hero.\n");
printf("FINISH\n");
}
return 0;
}
HDU1026 Ignatius and the Princess I 优先队列宽搜+路径输出
最新推荐文章于 2021-01-23 23:35:55 发布