http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1124

飞跃原野

Time Limit: 5000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

勇敢的法里奥出色的完成了任务之后,正在迅速地向自己的基地撤退。但由于后面有着一大群追兵,所以法里奥要尽快地返回基地,否则就会被敌人逮住。

终于,法里奥来到了最后的一站:泰拉希尔原野,穿过这里就可以回到基地了。然而,敌人依然紧追不舍。不过,泰拉希尔的地理条件对法里奥十分有利,众多的湖泊随处分布。敌人需要绕道而行,但法里奥还是决定找一条能尽快回到基地的路。
 
假设泰拉希尔原野是一个m*n的矩阵,它有两种地形,P表示平,L表示湖泊,法里奥只能停留在平地上。他目前的位置在左上角(1,1)处,而目的地为右下角的(m,n)。法里奥可以向前后左右4个方向移动或飞行,每移动1格需要1单位时间。而飞行的时间主要花费在变形上,飞行本身时间消耗很短,所以无论一次飞行多远的距离,都只需要1单位时间。飞行的途中不能变向,并且一次飞行最终必须要降落到平地上。当然,由于受到能量的限制,法里奥不能无限制飞行,他总共最多可以飞行的距离为D。在知道了以上的信息之后,请你帮助法里奥计算一下,他最快到达基地所需要的时间。

输入

第一行是3个整数,m(1≤m≤100),n(1≤n≤100),D(1≤D≤100)。表示原野是m*n的矩阵,法里奥最多只能飞行距离为D。接下来的m行每行有n个字符,相互之间没有空格。P表示当前位置是平地,L则表示湖泊。假定(1,1)和(m,n)一定是平地。

输出

一个整数,表示法里奥到达基地需要的最短时间。如果无法到达基地,则输出impossible。

示例输入

4 4 2
PLLP
PPLP
PPPP
PLLP

示例输出

5

我的搜索学的很烂,这题就是一个简单地三维bfs,但拿道题却感到无从下手。搜索的题需要狠狠加强。
bfs中每步都要搜索所有能走的地方,例如这题第一步搜索,上下左右,2~d*上下左右.这是算法的核心。
其他部分都是围绕算法的核心进行。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
char map[][];
int v[][][];
int n,m,d;
struct node
{
int x,y,z;
int ans;
}q[];
int jx[]={,-,,};
int jy[]={,,,-};
void bfs()
{
memset(v,,sizeof(v));
int e=;
int s=;
struct node t,f;
t.x=;
t.y=;
t.z=d;
t.ans=;
v[t.x][t.y][t.z]=;
q[e++]=t;
while(s<e)
{
t=q[s++];
if(t.x==n-&&t.y==m-)
{
printf("%d\n",t.ans);
return ;
}
for(int i=;i<;i++)
{
f.x=t.x+jx[i];
f.y=t.y+jy[i];
if(f.x>=&&f.x<n&&f.y>=&&f.y<m&&v[f.x][f.y][t.z]==&&map[f.x][f.y]=='P')
{
f.ans=t.ans+;
f.z=t.z;
v[f.x][f.y][f.z]=;
q[e++]=f; }
}
for(int j=;j<=t.z;j++)
{
for(int i=;i<;i++)
{
f.x=t.x+jx[i]*j;
f.y=t.y+jy[i]*j;
if(f.x>=&&f.x<n&&f.y>=&&f.y<m&&v[f.x][f.y][t.z-j]==&&map[f.x][f.y]=='P')
{
f.ans=t.ans+;
f.z=t.z-j;
v[f.x][f.y][f.z]=;
q[e++]=f;
}
}
}
}
printf("impossible\n");
return ;
}
int main()
{
while(scanf("%d%d%d",&n,&m,&d)!=EOF)
{
for(int i=;i<n;i++)
{
scanf("%s",map[i]);
}
bfs();
}
return ;
}

飞跃平野(sdut1124)的更多相关文章

  1. windows 本地构建hadoop-spark运行环境(hadoop-2.6, spark2.0)

    下载hadoop http://hadoop.apache.org/releases.html --> http://mirrors.tuna.tsinghua.edu.cn/apache/ha ...

  2. 如何获取豆瓣电影 API Key

    如何获取豆瓣电影 API Key 豆瓣 API Key 不能使用了 ! solutions & !== ? https://frodo.douban.com/api/v2/subject_co ...

  3. 关于空指针NULL、野指针、通用指针 (转)

    reference:https://www.cnblogs.com/losesea/archive/2012/11/16/2772590.html 首先说一下什么是指针,只要明白了指针的含义,你就明白 ...

  4. 关于空指针NULL、野指针、通用指针

    http://www.cnblogs.com/losesea/archive/2012/11/16/2772590.html 首先说一下什么是指针,只要明白了指针的含义,你就明白null的含义了.假设 ...

  5. XX年年终总结---重新飞跃

    XX年年终总结---重新飞跃 写之前先解释一下为什么是年终总结,由于在提高班学习,每年结束于暑假:新的一年開始于9月. 肚子里的墨水已经找不到新的词语来形容时间过得快了,一年结束了.还有一年又结束了: ...

  6. 喜讯!联诚发创始人龙平芳荣获2019LED行业优秀女企业家称号!联诚发横揽三项大奖!

           2019年12月20日,在深圳大梅沙京基喜来登度假酒店隆重举行“蝶变跨越”慧聪LED显示屏行业品牌盛会颁奖典礼!在来自全国各地的LED显示屏行业协会领导,企业领袖,精英代表以及来自全国各 ...

  7. iOS UIButton 设置图片平铺

    UIImage *image2 = [UIImage imageNamed:imgName]; CGFloat top = ; // 顶端盖高度 CGFloat bottom = ; // 底端盖高度 ...

  8. linux kernel elv_queue_empty野指针访问内核故障定位与解决

    1. 故障描述 故障操作步骤: 单板上插了一个U盘,出问题前正在通过FTP往单板上拷贝文件,拷贝的过程中单板自动重启. 故障现象: Entering kdb (current=0xc000000594 ...

  9. 从Facebook跑来阿里的赵海平大叔,你要干啥?

    赵海平在今年三月份来到阿里,听毕玄(他现任主管)说去年五六月份就跟赵海平聊上了.有人问:为啥 BAT 三大巨头,你看中了阿里巴巴?在今天现场达一千多人的分享中赵海平给出了回复:“因为百度和腾讯没找我呗 ...

随机推荐

  1. WebService连接postgresql( 失败尝试)

     一.先进行postgresql的配置 1. 安装ODBC驱动 下载地址:http://www.postgresql.org/ftp/odbc/versions/msi/ 2. 打开 控制面板 -&g ...

  2. 【抓包分析】Charles和 夜神模拟器 对安卓应用进行抓包分析

    准备工具 : 1 Charles   : https://www.charlesproxy.com  (收费) 2 夜神模拟器  : https://www.yeshen.com  (免费) 2 模拟 ...

  3. C# 中对COOKIES的操作

    HttpUtility.UrlDecode HttpUtility.UrlEncode HttpContext.Current.Request.Cookies["UserCode" ...

  4. UE和UI的区别

    UI:User Interface的缩写,是指用户界面,最普遍的应用是在软件开发中,主要是指程序的用户操作界面的设计,随着Web应用的普及,UI也应用在了Web的用户界面规划上了.网站用户界面(Web ...

  5. rabbitmq在centos 7上的安装

    一.安装步骤 参考了官网文档: http://www.rabbitmq.com/install-rpm.html#package-dependencies 这里大概介绍下. rabbitmq-serv ...

  6. IIS "rewrite.dll failed to load. The data is the error." 错误解决方法

    在Windows 10 build 17133.73上部署一个较老版本的ASP.NET 2.0程序,访问时候出现: Service Unavailable HTTP Error 503. The se ...

  7. C语言中的数组的使用——混乱的内存管理

    在C语言中想要创建数组只能自己malloc或者calloc,数组复制则是memcpy. 这样创建出来的数组在调用时是不会检测数组边界的,即你声明了一个长度为5的数组,却可以访问第6个位置……也可以给第 ...

  8. iOS - 获取安装所有App的Bundle ID

    先导入#import <objc/runtime.h>头文件 使用runtime获取设备上的所有app的bundle id // Class LSApplicationWorkspace_ ...

  9. easyui_2----messager

    <script> $.messager.alert("这是头","这是内容"); </script> 必须放在 $(function() ...

  10. jsonk可以传递boolean

    JSON 布尔值可以是 true 或者 false.如: { "flag":true } 或者{“flag”,"true"}