标签:
Rescue13
//我真是弱爆了,一个x写成大写调试了N久才出来,都是泪啊。。。 bfs+优先队列
#include <stdio.h>
#include <queue>
#include <string.h>
using namespace std;
int n,m,stax,stay,stox,stoy;
char ma[210][210];
bool vis[210][210];
int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
struct Node
{
int x,y,step;
friend bool operator <(const Node &a,const Node &b)
{
return a.step>b.step;
}
};
int bfs(int xx,int yy)
{
priority_queue <Node> q;
memset(vis,0,sizeof(vis));
Node a;
a.x=xx,a.y=yy,a.step=0;
q.push(a);
while(!q.empty())
{
Node b=q.top();
q.pop();
vis[b.x][b.y]=1;
if(b.x==stox&&b.y==stoy) return b.step;
for(int i=0;i<4;i++)
{
Node c=b;
c.x+=dir[i][0];
c.y+=dir[i][1];
if(ma[c.x][c.y]=='x')
c.step+=2;
else
c.step++;
if(c.x>=0&&c.x<n&&c.y>=0&&c.y<m&&ma[c.x][c.y]!='#'&&!vis[c.x][c.y])
{
q.push(c);
vis[c.x][c.y]=1;
}
}
}
return -1;
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
stox=-1,stoy=-1;
for(int i=0;i<n;i++)
{
scanf("%s",ma[i]);
}
for(int i=0;i<n;i++)
{
for(int k=0;k<m;k++)
{
if(ma[i][k]=='r')
{
stax=i;
stay=k;
}
if(ma[i][k]=='a')
{
stox=i;
stoy=k;
}
}
}
int cnt=bfs(stax,stay);
if(cnt!=-1)
printf("%d\n",cnt);
else
printf("Poor ANGEL has to stay in the prison all his life.\n");
}
return 0;版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/a73265/article/details/46860463