题目描述

小H在一个划分成了n*m个方格的长方形封锁线上。 每次他能向上下左右四个方向移动一格(当然小H不可以静止不动), 但不能离开封锁线,否则就被打死了。 刚开始时他有满血6点,每移动一格他要消耗1点血量。一旦小H的 血量降到 0, 他将死去。 他可以沿路通过拾取鼠标(什么鬼。。。)来补满血量。只要他走到有鼠标的格子,他不需要任何时间即可拾取。格子上的鼠标可以瞬间补满,所以每次经过这个格子都有鼠标。就算到了某个有鼠标的格子才死去, 他也不能通过拾取鼠标补满 HP。 即使在家门口死去, 他也不能算完成任务回到家中。

地图上有 5 种格子:

数字 0: 障碍物。

数字 1: 空地, 小H可以自由行走。

数字 2: 小H出发点, 也是一片空地。

数字 3: 小H的家。

数字 4: 有鼠标在上面的空地。

小H能否安全回家?如果能, 最短需要多长时间呢?

输入格式:

第一行两个整数n,m, 表示地图的大小为n*m。

下面 n 行, 每行 m 个数字来描述地图。

输出格式:

一行, 若小H不能回家, 输出-1,否则输出他回家所需最短时间。

说明

1<=n,m<=9

分析

390分,还算好吧,毕竟从才十点多做到现在了

偷偷看了看分类发现有搜索两个小字

于是开始乱搞,bfs,dfs,枚举都上了,一直一个点过不了,TLE

一定是我的玄学优化不够到位(大雾)

并没有AC的代码

DogFS

#include <cstdio>
using namespace std;
struct loc
{int x,y;
};
loc st;
int n,m;
int ans=82;
int map[11][11];
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
void dfs(int x,int y,int z,int w)
{if (!map[x][y]||!z||w>ans)return;if (map[x][y]==3&&ans<w){ans=w;return;}for (int i=0;i<4;i++)if (map[x+dx[i]][y+dy[i]]){int t=z-1;if (map[x][y]==4){t=6;}dfs(x+dx[i],y+dy[i],t,w+1);}
}
int main()
{scanf("%d%d",&n,&m);for (int i=1;i<=n;i++)for (int j=1;j<=m;j++){scanf("%d",&map[i][j]);if (map[i][j]==2){st.x=i;st.y=j;}}dfs(st.x,st.y,6,0);if (ans==82)ans=-1;printf("%d\n",ans);return 0;
}

BoyFS

#include <stdio.h>
#include <queue>
using namespace std;
struct state
{int x,y,w,z;
};
int n,m;
int map[11][11];
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
bool f[11][11];
queue<state>q;
int bfs()
{state now,t;while (q.size()){t=q.front();for (int i=0;i<4;i++){now.x=t.x+dx[i];now.y=t.y+dy[i];now.w=t.w-1;now.z=t.z+1;if (map[now.x][now.y]&&now.w&&!f[now.x][now.y]){f[now.x][now.y]=true;if (map[now.x][now.y]==4){f[now.x][now.y]=false;now.w=6;}q.push(now);}}q.pop();if (map[t.x][t.y]==3){return t.z;}}return -1;
}
int main()
{state st;scanf("%d%d",&n,&m);for (int i=1;i<=n;i++)for (int j=1;j<=m;j++){scanf("%d",&map[i][j]);if (map[i][j]==2){st.x=i;st.y=j;st.w=6;st.z=0;q.push(st);f[st.x][st.y]=true;}}printf("%d\n",bfs());return 0;
}

转载于:https://www.cnblogs.com/olahiuj/p/5781235.html

回家_洛谷U3427_dfsbfs相关推荐

  1. python高精度乘法_洛谷P1919--A*B Problem升级版(NTT优化高精度乘法)

    题目背景 本题数据已加强,请使用 FFT/NTT,不要再交 Python 代码浪费评测资源. 题目描述 给你两个正整数 a,b,求$ a \times b$. 输入格式 第一行一个正整数,表示 a: ...

  2. java 旅行家的预算_洛谷 P1016 旅行家的预算 Java解法

    洛谷 P1016 旅行家的预算 Java解法 洛谷 P1016 旅行家的预算 Java解法 package com.two; import java.util.Scanner; public clas ...

  3. c语言倒序输出单词_洛谷 || 单词覆盖还原(C语言)

    点击上方「蓝字」关注"程序员Bob" 每天与你不见不散! 每日一句,送给最珍贵的你: 诱人的机会总是转瞬即逝的.真正好的投资机会不会经常有,也不会持续很长的时间,所以你必须做好行动 ...

  4. python冰雹猜想_洛谷-P5727 【深基5.例3】冰雹猜想

    洛谷-P5727 [深基5.例3]冰雹猜想 给出一个正整数 \(n(n\le 100)\),然后对这个数字一直进行下面的操作:如果这个数字是奇数,那么将其乘 3 再加 1,否则除以 2.经过若干次循环 ...

  5. c语言怎么将n个数字存入到数组中_洛谷 || 拼数(C语言)

    点击这里关注"程序员Bob" Success does not consist in never making mistakes but in never making the s ...

  6. 7-6 统计字符串中数字字符的个数_洛谷 || 标题统计(C语言)

    点击上方「蓝字」关注"程序员Bob" 每天与你不见不散! 每日一句,送给最珍贵的你: Happy people focus on what they have, unhappy p ...

  7. 学校选址_洛谷U3451_带权中位数

    题目描述 在一条大路一旁有许多栋楼,每栋楼里有许多小学生(哈哈哈一波小学生来袭!).但是这条路上没有小学!!!!所以唯恐世界不乱的牛A打算在路上(汽车什么的都不敢来这个小学生云集的地方咯,所以不用担心 ...

  8. 表达式括号匹配_洛谷1739_栈

    题目背景 你猜 题目描述 假设一个表达式有英文字母(小写).运算符(+,-,*,/)和左右小(圆)括号构成,以"@"作为表达式的结束符.请编写一个程序检查表达式中的左右圆括号是否匹 ...

  9. 编程题走迷宫_洛谷P1238 走迷宫题解

    题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个数据来描述的,分别表示 ...

  10. 电车_洛谷1346_最短路

    题目描述 在一个神奇的小镇上有着一个特别的电车网络,它由一些路口和轨道组成,每个路口都连接着若干个轨道,每个轨道都通向一个路口(不排除有的观光轨道转一圈后返回路口的可能).在每个路口,都有一个开关决定 ...

最新文章

  1. python项目之网络聊天室_Python实现多人聊天室
  2. C++11多线程编程-两个进程轮流打印1~100
  3. 查询score中选学多门课程的同学中分数为非最高分成绩的记录。
  4. Android四级缓存,RecyclerView的四级缓存-初探
  5. 孩子上了高一突然学不懂了,该怎么办?
  6. 如何将电视机用作 Mac 的显示器?
  7. poj 3267 -- The Cow Lexicon
  8. 一个词三个功能,较真人员少啊
  9. 20191205每日一句
  10. JavaSE知识框架
  11. 浏览器阻挡cookies_浏览器需要阻止第三方cookie吗?
  12. 谷歌眼镜原理揭秘 (二) ----- 简述谷歌眼镜成像原理
  13. 金融货币学笔记(米什金)第二章 金融体系概览
  14. linux未备案本地网站访问,教你如何解析未备案的域名到国内服务器
  15. 西部数据推出10TB容量监控级硬盘
  16. 使用Matlab SPM12与MRIcroGL进行头核磁ROI的标准化与Overlap图的制作
  17. 老板心血来潮要自己搞低代码平台?这个开源项目试一试!
  18. OpenCV常用函数记载
  19. 研究生和本科生学习的差别
  20. 前端开发技术路线图(Roadmap)

热门文章

  1. “21天好习惯“第一期-5
  2. mysql explode函数_hive中,lateral view 与 explode函数
  3. 1月计算机会议,计算机类 | 2019年1月截稿国际会议信息8条
  4. Ubuntu ROS Kinect2安装
  5. Zephyr:compatible ‘micro,wm89xx‘ has unknown vendor prefix ‘micro‘
  6. Linux内核开发_3_busybox
  7. Opencv绘制HSV颜色直方图
  8. Android 使用 Gradle 打包 - 签名配置
  9. CentOS6系统编译部署LAMP(Linux, Apache, MySQL, PHP)环境
  10. Python 进阶之路 (五) map, filter, reduce, zip 一网打尽