标签:ane pos name strong ++ new etc desc map
7 8 #.#####. #.a#..r. #..#x... ..#..#.# #...##.. .#...... ........
13
题解:广搜,每次找时间最短的一个,因为遇到士兵时间多1,此时这个点应该排在后面。所以用优先队列排序。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
struct Node
{
int x;
int y;
int time;
Node(int a,int b,int c)
{
x = a;
y = b;
time = c;
}
bool operator< (Node t) const
{
return time > t.time;
}
};
int sx,sy;
int n,m;
int ans;
char map[205][205];
int d[4][2] = {{0,-1},{0,1},{-1,0},{1,0}};
bool bfs()
{
priority_queue<Node> q;
q.push(Node(sx,sy,0));
ans = 0;
map[sx][sy] = ‘#‘;
while(!q.empty())
{
Node p = q.top();
q.pop();
for(int i = 0;i < 4;i++)
{
int x = p.x + d[i][0];
int y = p.y + d[i][1];
if(x >= 0 && x < n && y >= 0 && y < m && map[x][y] != ‘#‘)
{
if(map[x][y] == ‘a‘)
{
ans = p.time + 1;
return true;
}
if(map[x][y] == ‘x‘)
{
q.push(Node(x,y,p.time + 2));
}
else
{
q.push(Node(x,y,p.time + 1));
}
map[x][y] = ‘#‘;
}
}
}
return false;
}
int main()
{
while(scanf("%d%d",&n,&m) != EOF)
{
getchar();
for(int i = 0;i < n;i++)
{
for(int j = 0;j < m;j++)
{
scanf("%c",&map[i][j]);
if(map[i][j] == ‘r‘)
{
sx = i;
sy = j;
}
}
getchar();
}
if(bfs())
{
printf("%d\n",ans);
}
else
{
printf("Poor ANGEL has to stay in the prison all his life.\n");
}
}
return 0;
}标签:ane pos name strong ++ new etc desc map
原文地址:http://www.cnblogs.com/yutingliuyl/p/6863812.html