点击打开链接
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 12171 Accepted Submission(s): 4435
题目的意思是说friends用最短的时间去救angel, '.'表示通道 ,'#'表示墙壁, 'x'表示guard走一格要一单位时间,杀死一个guard要一个单位时间,求最短时间。WA了20来次才过了,我改了改发现到最后AC的一次仅仅是把SCANF改成CIN。哦,shit,太坑爹了。。。。。
#include
#include
#include
#include
using namespace std;
char map[200][200];
int dir[4][2]= {{0,1},{1,0},{0,-1},{-1,0}};
int vis[200][200];
int n,m,sx,sy,ans;
struct node
{
int x,y,step;
bool operator<(const node t)const
{
return t.step=1&&x<=n&&y>=1&&y<=m&&map[x][y]!='#'&&!vis[x][y])
return true;
return false;
}
node qq;
void BFS(int x,int y)
{
priority_queueq;
node next;
qq.x=x;
qq.y=y;
qq.step=0;
q.push(qq);
vis[qq.x][qq.y]=1;
while(!q.empty())
{
node first;
first=q.top();
q.pop();
for(int i=0; i<4; i++)
{
int xx,yy;
xx=first.x+dir[i][0];
yy=first.y+dir[i][1];
if(xx>=0&&xx=0&&yy>n>>m)
{
for(int i=0; i>map[i][j];
if(map[i][j]=='a')
{
sx=i;
sy=j;
}
}
//getchar();
}
ans=-1;
memset(vis,0,sizeof(vis));
BFS(sx,sy);
if(ans!=-1)
printf("%d\n",ans);
else
printf("Poor ANGEL has to stay in the prison all his life.\n");
}
return 0;
}