Diablo | ||||||
| ||||||
Description | ||||||
Diablo是地狱中的三大魔王之一,有着非常强大的破坏力,Diablo期望着可以将一切都投入到地狱之中。为了不让Diablo的计划得逞,一位英雄决定挺身而出,试图击败Diablo。DIablo喜欢把眼前的区域变成一片火海,Diablo吐出火焰的蔓延是有一定规律的,火焰总是会向能量较低的区域蔓延。英雄如果不想被Diablo击败的话,就需要在Diablo喷出火焰的一瞬间逃到火焰烧不到的地方,但是他只能在这一瞬逃出3个单位长度的距离。现在我们给出现场的一个地图,并且给出Diablo和英雄所在的位置,我们要知道英雄是否可以逃脱Diablo的攻击。(火焰蔓延方向只能是上、下、左、右) | ||||||
Input | ||||||
本题有多组测试数据,对于每组数据第一行输入6个非负整数,分别表示地图的长、宽(分别对应m、n),Diablo的坐标以及英雄的坐标。接下来n行每行输入m个数,表示地图上每个点的能量值(值在32位有符号整数范围内)。m、n值均不大于100,且我们保证数据合理合法。 | ||||||
Output | ||||||
如果英雄可以逃脱Diablo的攻击,输出Hero will be back并换行,否则输出Diablo win并换行。 | ||||||
Sample Input | ||||||
3 3 0 0 2 2
6 4 0 0 2 3 | ||||||
Sample Output | ||||||
Diablo win Hero will be back
| ||||||
Hint | ||||||
我们来看看第二组样例数据,Diablo所处的位置是(0, 0),那么Diablo在地图上左上角的点,其能量值为5。英雄所在的位置是(2, 3),也就是我们看到地图上第三行第四列的位置,其能量值为3。不过火焰只能从能量高的地方向能量低的地方蔓延,尽管英雄处在的位置能量值较低,但是火焰却无法蔓延到这里,因为有能量相对较高的地势阻隔。假设英雄所在的位置能被火焰蔓延到,他只需在3步内找到一个火焰不可达的合法区域即可躲过攻击。
沉迷搜索,无法自拔;
|
#include<bits/stdc++.h>
using namespace std;
#define maxn 105
int n, m, x_boss, y_boss, x, y, flag;
int maps[maxn][maxn];
int vis[maxn][maxn];
int step[4][2] = {1, 0, 0, 1, -1, 0, 0, -1};
struct node
{
int xx, yy;
} op, uv;
void bfs(int x, int y)
{
op.xx = x;
op.yy = y;
vis[x][y] = 1;
queue<node >s;
s.push(op);
while(!s.empty())
{
op = s.front();
s.pop();
for(int i = 0; i < 4; i++)
{
uv.xx = op.xx + step[i][0];
uv.yy = op.yy + step[i][1];
if(uv.xx >= 0 && uv.yy >= 0 && uv.xx <= n && uv.yy <= m
&& !vis[uv.xx][uv.yy] && maps[uv.xx][uv.yy] < maps[op.xx][op.yy])
{
s.push(uv);
vis[uv.xx][uv.yy] = 1;
}
}
}
}
void dfs(int x, int y, int ss)
{
if(ss == 3)
return;
if(!vis[x][y])
{
flag = 1;
return;
}
for(int i = 0; i < 4; i++)
{
x += step[i][0];
y += step[i][1];
if(x >= 0 && x <= n && y >= 0 && y <= m && !vis[x][y])
{
vis[x][y] = 1;
dfs(x, y, ss + 1);
}
}
}
int main()
{
while(cin >> n >> m >> x_boss >> y_boss >> x >> y)
{
swap(n, m);
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++)
cin >> maps[i][j];
n--;
m--;
memset(vis, 0, sizeof vis);
flag = 0;
bfs(x_boss, y_boss);
dfs(x, y, 0);
printf("%s\n", flag == 1 ? "Hero will be back" : "Diablo win");
}
return 0;
}