Openjudge-4115-佐助和鸣人
这一题是一道广搜的题目,首先我们通过读入字符串读入每一行,然后顺带找到鸣人的位置。
然后我们初始化之后,就进行广搜,还是广搜的格式,但是要压入队列的条件我们可以稍微变一变,我们可以直接判断下一个要走的点,是星号或者是加号,我们就判断是否走过这一点是否走过。
我们判断的依据是,假设我们走这一点,消耗零个查克拉,然后在标记数组里面查看是否为零。
这么说,你可能不明白,但是如果这一点是#号,且查克拉大于零,我们准备走这个点,然后消耗一个查克拉,然后我们就可以去visited数组里面查找,我们是否在剩下该数目查克拉的时候走过这一点。
如果走过那就是一呗,我们广搜的时候不能搜索相同的点,也就是相同的位置,相同的查克拉,说明我们已经走过,我们不能再次返回。
但是如果查克拉的数目不一样的话,就说明,我们虽然走到了相同的位置,但是我们走的路线是不一样的,对不对。
我们在bfs搜的时候不能搜到下一层了,然后又开始回搜上一层的点,这就叫判重。
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
const int maxn=205;
int m,n,t;
int visited[maxn][maxn][15];
char maze[maxn][maxn];
int d[4][2]= {{-1,0},{1,0},{0,-1},{0,1}};
struct Step {
int x,y,t;
int step;
Step(int a,int b,int c,int d):x(a),y(b),t(c),step(d){}
};
queue <Step> q;
int main()
{
scanf("%d%d%d",&m,&n,&t);
Step first(0,0,0,0);
memset(visited,0,sizeof(visited));
for (int i=0;i<m;i++) {
scanf("%s",maze[i]);
for (int j=0;j<n;j++) {
if (maze[i][j]=='@') {
first.x=i,first.y=j,first.t=t,first.step=0;
visited[i][j][t]=1;
}
}
}
q.push(first);
while (!q.empty()) {
Step cur=q.front();
q.pop();
if (maze[cur.x][cur.y]=='+') {
cout<<cur.step<<endl;
return 0;
}
for (int i=0;i<4;i++) {
int dx=cur.x+d[i][0];
int dy=cur.y+d[i][1];
if (dx<0||dy<0||dx>=m||dy>=n)
continue;
if (maze[dx][dy]=='#'&&cur.t>0&&!visited[dx][dy][cur.t-1]) {
q.push(Step(dx,dy,cur.t-1,cur.step+1));
visited[dx][dy][cur.t-1]=1;
}
else if (maze[dx][dy]=='+'||maze[dx][dy]=='*'&&!visited[dx][dy][cur.t]) {
q.push(Step(dx,dy,cur.t,cur.step+1));
visited[dx][dy][cur.t]=1;
}
}
}
cout<<-1<<endl;
return 0;
}
Openjudge-4115-佐助和鸣人的更多相关文章
- #搜索# #BFS# #优先队列# ----- OpenJudge鸣人和佐助
OpenJudge 6044:鸣人和佐助 总时间限制: 1000ms 内存限制: 65536kB 描述 佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢? 已知一张地图(以二维矩阵的形式表示)以及佐 ...
- noi openjudge 6044:鸣人和佐助
http://noi.openjudge.cn/ch0205/6044/ 描述佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢? 已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置.地图上的每个 ...
- BFS:noi6044鸣人与佐助
PS:一道XX到我心态崩溃的好(傻逼)题. 先粘题目: 佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢? 已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置.地图上的每个位置都可以走到,只不过 ...
- OpenJ_Bailian——4115鸣人和佐助(带状态的A*)
鸣人和佐助 Time Limit: 1000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64u Submit Status Desc ...
- NOI / 2.5基本算法之搜索-6044:鸣人和佐助详解
总时间限制: 1000ms 内存限制: 65536kB 题目 佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢? 已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置.地图上的每个位置都可以走到, ...
- [openjudge-搜索]广度优先搜索之鸣人和佐助
题目描述 描述 佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢?已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置.地图上的每个位置都可以走到,只不过有些位置上有大蛇丸的手下,需要先打败大蛇丸 ...
- [NOI OJ]6044:鸣人和佐助
6044:鸣人和佐助 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢? 已知一张地图(以二维矩阵的形式表示) ...
- C#基础精华07(委托事件,委托的使用,匿名方法)
1.委托概述 委托是一种数据类型,像类一样(可以声明委托类型变量).方法参数可以是int.string.类类型 void M1(int n){ } √ void M2(string s){ } √ ...
- JS基础语法---数组案例---9个练习
练习1:求数组中所有元素的和 var arr1 = [10, 20, 30, 40, 50]; var sum = 0; for (var i = 0; i < arr1.length; i++ ...
随机推荐
- POJ2367【拓扑排序】
很裸的拓扑排序~ //#include <bits/stdc++.h> #include<iostream> #include<string.h> #include ...
- c# KeyDown KeyPress 函数中event 的 Handled属性
很奇怪的 KeyDown中的 Handled.true 只能使 Keys.Back 这类失效, 如果要使比如数字失效,必须设置一个变量 _bHandled = true 然后在紧接着会触发的 KeyP ...
- loj#2541. 「PKUWC2018」猎人杀
传送门 思路太清奇了-- 考虑容斥,即枚举至少有哪几个是在\(1\)号之后被杀的.设\(A=\sum_{i=1}^nw_i\),\(S\)为那几个在\(1\)号之后被杀的人的\(w\)之和.关于杀了人 ...
- 【Tip】JavaScript
『JavaScript』 『引用网络资源』 JQuery <script src="http://code.jquery.com/jquery-latest.js">& ...
- python之文件的读写
读 r 读写模式 r+ 如果打开文件时没有指定模式,默认只读,如果使用r或r+,文件不存在时会报错 写 w 写读模式 w+ w模式会清空原有的文件内容 追加 a 追加读 ...
- 洛谷 P2147 [SDOI2008]洞穴勘测
以下这个做法应该是叫线段树分治... 根据修改操作预处理出每条边存在的时间区间[l,r](以操作序号为时间),然后把所有形式化后的修改挂到线段树节点上. 处理完修改后,dfs一遍线段树,进入某个节点时 ...
- 双拓扑排序 HDOJ 5098 Smart Software Installer
题目传送门 /* 双拓扑排序:抄的,以后来补 详细解释:http://blog.csdn.net/u012774187/article/details/40736995 */ #include < ...
- linux下实现多台服务器同步文件(inotify-tools+rsync实时同步文件安装和配置)
inotify-tools+rsync实时同步文件安装和配置 注:转载https://www.linuxidc.com/Linux/2012-06/63624.htm
- magento 自定义url路径 和 filter data 小结
背景是往一个第三方的搜索插件里面加入filter功能. 首先是路径,插件自己定义了一个router,类似于cms.那首先说说router好了,从入口一路追查的话,会发现最后进入的是Mage_Core_ ...
- BeanUtils.copyProperties(productInfo, productInfoVO);
一:spring的工具类方法:BeanUtils.copyProperties(orderMasterDTO, orderMasterDO); 作用:将orderMasterDTO对象中的属性值,赋值 ...