PS:一道XX到我心态崩溃的好(傻逼)题。

先粘题目:

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

已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置。地图上的每个位置都可以走到,只不过有些位置上有大蛇丸的手下,需要先打败大蛇丸的手下才能到这些位置。鸣人有一定数量的查克拉,每一个单位的查克拉可以打败一个大蛇丸的手下。假设鸣人可以往上下左右四个方向移动,每移动一个距离需要花费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

先写一下心路历程吧。

还是一道典型迷宫,唯一的新颖是查克拉的加入。

首先,我写出基本的迷宫框架。

一开始判断查克拉的办法稍有复杂,借鉴了网上大佬的方法,依旧通过一个数组来判断查克拉。

别的地方没有太大的更新了,贴代码吧:

#include<cstdio>
#include<cstdlib>
#include<cstring>
int u[]={,-,,},p[]={,,,-};
int n,m,w,xz,yz,h,l;
bool vis[][][];
char b[][];
struct mmap{int dis,cha,x,y;};
mmap q[];
void doit(){
int i,x,y,head=,tail=;
q[].x=h; q[].y=l; q[].cha=w; q[].dis=;
while(head<tail) {
head++;
for(i = ; i < ; ++i){
x=u[i]+q[head].x;
y=p[i]+q[head].y;
if(x<=||x>m||y<=||y>n||((!q[head].cha)&&(b[x][y]=='#'))||!(vis[x][y][q[head].cha]))continue;
tail++;
q[tail].x =x;
q[tail].y =y;
q[tail].dis=q[head].dis+;
q[tail].cha=q[head].cha;
if(b[x][y]=='#')q[tail].cha--;
vis[x][y][q[tail].cha]=false;
if(x==xz&&y==yz){
printf("%d",q[tail].dis);
return ;
}
}
}
printf("-1");
}
int main(){
memset(vis,true,sizeof(vis));
scanf("%d %d %d",&m,&n,&w);
for(int i = ; i <= m ; ++i){
scanf("%s",b[i]+);
for(int j = ; j <= n ; ++j){
if(b[i][j]=='@'){
h=i;
l=j;
}
if(b[i][j]=='+'){
xz=i;
yz=j;
}
}
}
doit();
return ;
}

关于这道题就是这样了,下面,总结一下吧。

最近比较浮躁,静不下心,不停地提交提交,也没有仔细看看代码。之前一直在RE,于是一直检查数组,没看出错误。RE了好几次决定静下心看看代码,发现在还没有改变查克拉的时候就改变了vis查克拉。这是第一个错误。

之后再测评就一直5分,寻找最后一分错在哪里(满分6分)。仔细研究正确代码后发现,自己的数组开小了。虽然地图最大200*200,但是每一个点的查克拉最多有10种出现情况,也就是说,在用结构体时,每一个位置可能占用10个房间,那么一共便需要400000个房间。

这道题用了大量的时间,但也还值得,有很多收获:

结构体在搜索中的优势非常明显,可以更加简单明了;

也给自己一个很惨的教训:在以后,无论是做什么事,都要静下心来慢慢分析,太浮躁的结果只能是既花费时间,又没有太大收获。

以后我会牢牢记住这一点的。

那么,再次打起精神来,投入接下来的战斗吧!

傅远植  加油!!!!

2017.5.21

BFS:noi6044鸣人与佐助的更多相关文章

  1. #搜索# #BFS# #优先队列# ----- OpenJudge鸣人和佐助

    OpenJudge 6044:鸣人和佐助 总时间限制: 1000ms  内存限制: 65536kB 描述 佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢? 已知一张地图(以二维矩阵的形式表示)以及佐 ...

  2. [openjudge-搜索]广度优先搜索之鸣人和佐助

    题目描述 描述 佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢?已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置.地图上的每个位置都可以走到,只不过有些位置上有大蛇丸的手下,需要先打败大蛇丸 ...

  3. OpenJ_Bailian——4115鸣人和佐助(带状态的A*)

    鸣人和佐助 Time Limit: 1000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64u Submit Status Desc ...

  4. noi openjudge 6044:鸣人和佐助

    http://noi.openjudge.cn/ch0205/6044/ 描述佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢? 已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置.地图上的每个 ...

  5. [NOI OJ]6044:鸣人和佐助

    6044:鸣人和佐助 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢? 已知一张地图(以二维矩阵的形式表示) ...

  6. NOI / 2.5基本算法之搜索-6044:鸣人和佐助详解

    总时间限制: 1000ms 内存限制: 65536kB 题目 佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢? 已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置.地图上的每个位置都可以走到, ...

  7. BNUOJ29065鸣人的查克拉

    鸣人的查克拉 Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java class name: ...

  8. [openjudge-动态规划]鸣人的影分身

    题目描述 描述 在火影忍者的世界里,令敌人捉摸不透是非常关键的.我们的主角漩涡鸣人所拥有的一个招数--多重影分身之术--就是一个很好的例子. 影分身是由鸣人身体的查克拉能量制造的,使用的查克拉越多,制 ...

  9. NOI 8467 鸣人的影分身

    http://noi.openjudge.cn/ch0206/8467/ 描述 在火影忍者的世界里,令敌人捉摸不透是非常关键的.我们的主角漩涡鸣人所拥有的一个招数——多重影分身之术——就是一个很好的例 ...

随机推荐

  1. Android recyclerView的空数据显示

    直接分享链接:http://blog.csdn.net/whitley_gong/article/details/51244723

  2. asp.net使用qq邮箱发送邮件

    using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Ne ...

  3. 2017寒假零基础学习Python系列之函数之 返回多个值

    Python也和C语言一样有自己的标准库,不过在Python中叫做模块(module),这个和C语言中的头文件以及Java中的包类似,其中math就是其中之一,math模块中提供了sin()和cos( ...

  4. Java 中基本类型和字符串之间的转换

    Java 中基本类型和字符串之间的转换 在程序开发中,我们经常需要在基本数据类型和字符串之间进行转换. 其中,基本类型转换为字符串有三种方法: 1. 使用包装类的 toString() 方法 2. 使 ...

  5. Chrome浏览器扩展开发系列之十一:NPAPI插件的使用

    在Chrome浏览器扩展中使用HTML和JavaScript非常容易,但是如何重用已有的非JavaScript遗留系统代码呢?答案是将NPAPI插件绑定到Chrome浏览器扩展,从而实现在Chrome ...

  6. 在Apworks数据服务中使用基于Entity Framework Core的仓储(Repository)实现

    <在ASP.NET Core中使用Apworks快速开发数据服务>一文中,我介绍了如何使用Apworks框架的数据服务来快速构建用于查询和管理数据模型的RESTful API,通过该文的介 ...

  7. Hihocoder 1325 平衡树·Treap(平衡树,Treap)

    Hihocoder 1325 平衡树·Treap(平衡树,Treap) Description 小Ho:小Hi,我发现我们以前讲过的两个数据结构特别相似. 小Hi:你说的是哪两个啊? 小Ho:就是二叉 ...

  8. 小哈学Python第四课--运算符

    运算符: 1.算数运算符: 2. 比较运算符 3.赋值运算符 4. 逻辑运算符: 5. 成员运算:

  9. xdu_1077:循环节长度

    题意很简单,就是给出p,q,求p/q的循环节长度. 由循环小数的循环部分的值等于等比数列求和的值S,列公式得到最简分数分母的值.最终得10^x%q==1(其中q为经过modify之后的值).搞清这些之 ...

  10. [分享] 自动化测试与持续集成方案-- UI 检查

    对于自动化测试中,UI 自动化测试估计是最有争议的,让人又爱又恨. UI 自动化做回归测试,可以省下很多人力.如果版本一直不稳定,投入跟产出不成比例的. 时机 一般是要版本稳定,界面改动不大.如果迭代 ...