Diablo(广搜)

Diablo
Time Limit: 1000 MSMemory Limit: 65536 K
Total Submit: 43(22 users)Total Accepted: 24(21 users)Rating: Special Judge: No
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 5 4 1 4 3 2 3 2 1

 

6 4 0 0 2 3 5 2 6 7 3 0 4 3 8 1 5 5 9 1 8 3 6 5 8 7 6 5 4 2

Sample Output

Diablo win

Hero will be back

 

Hint
我们来看看第二组样例数据,Diablo所处的位置是(0, 0),那么Diablo在地图上左上角的点,其能量值为5。英雄所在的位置是(2, 3),也就是我们看到地图上第三行第四列的位置,其能量值为3。不过火焰只能从能量高的地方向能量低的地方蔓延,尽管英雄处在的位置能量值较低,但是火焰却无法蔓延到这里,因为有能量相对较高的地势阻隔。假设英雄所在的位置能被火焰蔓延到,他只需在3步内找到一个火焰不可达的合法区域即可躲过攻击。
Source
2014 Winter Holiday Contest 5
Author
杨和禹

 这个广搜的时候、应该注意,即便是已经遍历过的点,也不应该阻止下次·对这个点的遍历,因为只要被监测点的周围任意一个店的能量值比此点高,那么此点就应该被火焰蔓延

代码:

#include <math.h>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <iostream>
using namespace std;
int m,n,x_1,y_1,x_2,y_2;
typedef long long LONG;
LONG a[101][101];
int direct[4][2]={0,1,-1,0,0,-1,1,0};
int visit[100][100];
struct node
{
int x,y;
LONG e;
} p[10001],p1,p2;
int bfs()
{
int k=0;
int i,front=0,rear=0;
p[0]=p1;
memset(visit,0,sizeof(visit));
visit[x_1][y_1]=2;
while(rear<=front)
{
p2=p[rear++];
int e1=p2.e;
for(i=0;i<4;i++)
{
int x1=p2.x+direct[i][0];
int y1=p2.y+direct[i][1];
if(x1>=0&&x1<n&&y1>=0&&y1<m&&visit[x1

转载于:https://www.cnblogs.com/beige1315402725/p/4874761.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值