http://noi.openjudge.cn/ch0205/6044/

描述
佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢?

已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置。地图上的每个位置都可以走到,只不过有些位置上有大蛇丸的手下,需要先打败大蛇丸的手下才能到这些位置。鸣人有一定数量的查克拉,每一个单位的查克拉可以打败一个大蛇丸的手下。假设鸣人可以往上下左右四个方向移动,每移动一个距离需要花费1个单位时间,打败大蛇丸的手下不需要时间。如果鸣人查克拉消耗完了,则只可以走到没有大蛇丸手下的位置,不可以再移动到有大蛇丸手下的位置。佐助在此期间不移动,大蛇丸的手下也不移动。请问,鸣人要追上佐助最少需要花费多少时间?

输入
输入的第一行包含三个整数:M,N,T。代表M行N列的地图和鸣人初始的查克拉数量T。0 < M,N < 200,0 ≤ T < 10
后面是M行N列的地图,其中@代表鸣人,+代表佐助。*代表通路,#代表大蛇丸的手下。

输出
输出包含一个整数R,代表鸣人追上佐助最少需要花费的时间。如果鸣人无法追上佐助,则输出-1。

样例输入
样例输入1
4 4 1
#@##
**##
###+
****

样例输入2
4 4 2
#@##
**##
###+
****
样例输出
样例输出1
6

样例输出2
4

  芒果君:这道题是一个多维的bfs,在我没有看题解之前,我做了一个脑残的剪枝,比如走到一个守卫的位置,如果之前走过了,那就比较这次和上次剩的查克拉数量,如果比上次剩得多才能走,结果,因为决策的后效性,我的代码出了问题。所以将查克拉作为第三维度,只有相同数量才能比较状态。

#include<cstdio>
#define len 50000
using namespace std;
char c;
int ans,m,n,map[][],state[][][],pre[len],I[len],J[len],K[len],X,Y,fi,fj,head,tail,i,j,di[]={,-},dj[]={,,,-};
void solve(int x)
{
if(x)
{
ans++;
solve(pre[x]);
}
}
int main()
{
scanf("%d%d%d",&m,&n,&K[]);
for(i=;i<=m;++i)
{
for(j=;j<=n;++j)
{
scanf(" %c",&c);
switch(c)
{
case '+':fi=i,fj=j;break;
case '@':I[]=i,J[]=j,state[i][j][]=;
case '#':map[i][j]=;break;
default:break;
}
}
}
head=,tail=,pre[]=;
while(head!=tail)
{
head++;
for(i=;i<;++i)
{
X=di[i]+I[head],Y=dj[i]+J[head];
if(!state[X][Y][K[head]-map[X][Y]]&&K[head]-map[X][Y]>=&&X>=&&X<=m&&Y>=&&Y<=n)
{
tail++;
pre[tail]=head;
I[tail]=X,J[tail]=Y;
K[tail]=K[head]-map[X][Y];
state[X][Y][K[tail]]=;
if(X==fi&&Y==fj)
{
solve(pre[tail]);
printf("%d",ans);
return ;
}
}
}
}
printf("-1");
return ;
}

(PS:我的广搜,都写得特——别——吃——藕——)

最新文章

  1. uploadify上传错误:uncaught exception: call to startUpload failed原因
  2. H264编码原理以及I帧、B和P帧详解
  3. iOS 自定义图片和文字垂直显示按钮&lt;上面是图片,文字显示下面&gt;
  4. 下载Spring框架开发包
  5. const 和 readonly 修饰符的用法
  6. 理解ASP.NET 5的中间件
  7. Asp.net MVC的actionlink到Areas里action
  8. HttpUnit学习笔记
  9. js控件位置
  10. Hadoop学习之自定义二次排序
  11. HDU 3835 R(N)(枚举)
  12. CSS中的剪裁和遮罩
  13. c++(单向链表)
  14. Spark环境搭建
  15. POJ 2912 Rochambeau(暴力)+【带权并查集】
  16. poi横纵动态导入
  17. 第6章 Selenium2-Java&#160;自动化测试模型
  18. [拍摄]『ROSE 拆解』SONY 摄像机镜头拆解。
  19. Linux下IP SAN共享存储操作记录
  20. 【java】之彻底明白进制转换

热门文章

  1. Python 9--特殊方法
  2. CF940F Machine Learning 带修改莫队
  3. [linux]sudo 出现unable to resolve host 解决方法
  4. 微信小程序开发-踩坑
  5. 2019PKUWC游记
  6. 记录下我用Jenkins打包碰到的坑
  7. Ryu控制器编程开发——packet_in和packet_out简易交换机实现
  8. iOS开发 Error: CGImageProviderCreate: invalid image provider size
  9. pwn学习日记Day17 《程序员的自我修养》读书笔记
  10. git常用操作方法