您的位置:首页 > 产品设计 > UI/UE

广搜+优先队列-hdu-Rescue

2015-01-10 10:22 281 查看
传说中的最裸,广搜+优先队列点击打开题目链接

//r为起点,a为终点,x为士兵,需要花费1分钟杀死,每移动一格需要1分钟
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
int M,N;
char map[205][205];
int flag[205][205];
int dir[4][2]={{-1,0},{0,1},{1,0},{0,-1}};
struct Info
{
int x,y,time;
bool operator <(const Info &d)const
{
return d.time<time;
}
};
priority_queue<Info> pq;
void bfs()
{
int i;
while(!pq.empty())
{
Info v=pq.top();
pq.pop();
if(map[v.x][v.y]=='a')
{
printf("%d\n",v.time);
return;
}
for(i=0;i<4;i++)
{
int xx=v.x+dir[i][0];
int yy=v.y+dir[i][1];
if(xx>=0&&xx<M&&yy>=0&&yy<N&&!flag[xx][yy]&&map[xx][yy]!='#')
{
flag[xx][yy]=1;
Info f;
f.x=xx;
f.y=yy;
if(map[xx][yy]=='x')
f.time=v.time+2;
else
f.time=v.time+1;
pq.push(f);
}
}
}
printf("Poor ANGEL has to stay in the prison all his life.\n");
}
int main()
{
int i,j,len,i1,j1;
while(scanf("%d%d",&M,&N)!=EOF)
{
memset(flag,0,sizeof(flag));
while(!pq.empty())
pq.pop();
for(i=0;i<M;i++)
{
scanf("%s",map[i]);
len=strlen(map[i]);
for(j=0;j<len;j++)
{
if(map[i][j]=='r')
{
i1=i;
j1=j;
}
}
}
Info u;
u.x=i1;
u.y=j1;
u.time=0;
flag[i1][j1]=1;
pq.push(u);
bfs();
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: