#include <iostream>
using namespace std;
const int MAX=205;
char map[MAX][MAX];
int bfs_search(int si,int sj,int di,int dj)
{
int dir[4][2]={0,1,0,-1,1,0,-1,0};
int newi,newj;
typedef struct {
int i,j,lev;
int guard;
}Queue;
Queue Q[MAX*MAX];
Queue e;
int top,rear;
top=rear=0;
Q[rear].i=si;Q[rear].j=sj;Q[rear].guard=0;Q[rear].lev=0;
rear++;
while(top!=rear)
{
e=Q[top++];
if(e.i==di && e.j==dj)
return e.lev;
if(e.guard==1)
{
e.guard=0;
e.lev++;
Q[rear++]=e;
}
else
{
for(int k=0;k<4;k++)
{
newi=e.i+dir[k][0];
newj=e.j+dir[k][1];
if(map[newi][newj]!='#')
{
Q[rear].i=newi;
Q[rear].j=newj;
Q[rear].lev=e.lev+1;
if(map[newi][newj]=='x')
Q[rear].guard=1;
else
Q[rear].guard=0;
map[newi][newj]='#';
rear++;
}
}
}
}
return 0;
}
void main()
{
int N,M;
int si,sj,di,dj;
while(scanf("%d%d",&N,&M)!=EOF)
{
int i,j;
for(i=0;i<=N+1;i++)
map[i][0]=map[i][M+1]='#';
for(j=1;j<=M;j++)
map[0][j]=map[N+1][j]='#';
for(i=1;i<=N;i++)
{
for(j=1;j<=M;j++)
{
cin>>map[i][j];
if(map[i][j]=='a')
{si=i;sj=j;}
else if(map[i][j]=='r')
{di=i;dj=j;}
}
}
int nstep=bfs_search(si,sj,di,dj);
if(nstep!=0)
cout<<nstep<<endl;
else
cout<<"Poor ANGEL has to stay in the prison all his life."<<endl;
}
}
分享到:
相关推荐
hdoj上的资源,代码有注释,很不错的哦
HDOJ从零到零 <<< <<< <<< >>> >>> >>> :calendar:阶段性计划 :bullseye: 2021-04-30〜30题
ACM ICPC HDOJ1003
杭电acm解题报告 详细解析2000-2099 适合acm初学者
http://acm.hdu.edu.cn/ 杭电 2051到2099 acm的AC解题报告
hdoj杭电1000-2000部分解题报告 部分是cpp 格式 部分是文档格式
leetcode 1198 Algorithm HDOJ、Leetcode 并查集 图
leetcode和hdoj 简介 主要用来记录算法刷题记录和一些模板 文件结构 leetcode 存放leetcode题目和周赛 atcoder 用于存放参与和vp的atcoder比赛 codeforces 用于存放参与和vp的cf比赛,比赛文件夹以比赛序号和div描述...
我去年暑假花了5天,把杭电ACM网站上2000到2099这100道题全AC了,又花了10来天精心写解题报告。 里面包括题目、解题思路、编程技巧以及参考源码。所有代码都是使用C/C++写的。 最近整理资料时无意间发现,打包...
http://acm.hdu.edu.cn/ 杭电 2000到2050 acm的AC解题报告
HDOJ题目分类HDOJ题目分类HDOJ题目分类
ACM ICPC HDOJ1002
ACM ICPC HDOJ1001
codj,hdoj的源码(50-60题)
hdoj1001标程
hdoj解题代码,题目为1000-1050
杭州电子科技大学hdoj1002,大整数相加问题
hdoj1004,解题代码,答案代码,欢迎下载
ACM ICPC HDOJ1008
c语言 最短路 是hdoj上的一个最短路问题,写的很牛