洛谷 P1301 魔鬼之城

2023-11-23 03:59
文章标签 洛谷 魔鬼 p1301

本文主要是介绍洛谷 P1301 魔鬼之城,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

P1301 魔鬼之城

题目描述

在一个被分割为N*M个正方形房间的矩形魔鬼之城中,一个探险者必须遵循下列规则才能跳跃行动。他必须从(1, 1)进入,从(N, M)走出;在每一房间的墙壁上都写了一个魔法数字,是1~13之内的自然数;探险者可以想像出8个方向中的任何一个(水平或垂直或对角线方向),随后他就可以作一次空间跳跃穿过这一方向上的连续的X个房间,其中X是他原来所在房间的魔法数字。但如果在这一方向上的房间数小于X,则他不作任何跳跃,而必须想像另一个方向。同时,探险者不能作连续两次相同方向的跳跃。

例如在上图的5*4的魔鬼之城中,如果探险者现在所在的位置是(3, 3),那么通过依次空间跳跃他可以到达下列房间中的一个:(1, 1),(3, 1),(1, 3),(5, 1),或(5, 3)。另外,如果他要用两次跳跃从(5, 4)到达(3, 2),则他不能首先跳到(4, 3)(因为这样他第二次跳跃的方向将和第一次相同,而这是不允许的)。所以他必须先跳跃到(2, 1)。

请你写一个程序,对给定的地图,算出探险者至少需要跳跃多少步才能离开魔鬼之城。

输入输出格式

输入格式:

 

一行给出N,M(都不超过100);

下来有M行,每行为N个自然数,表示对应房间中的魔法数字。

 

输出格式:

 

出最小步数,如果探险者无法离开魔鬼之城,请输出“NEVER”。

 

输入输出样例

输入样例#1: 复制
5 4
3 3 6 7 11
3 2 1 1 3
3 2 2 1 1
2 1 2 2 1
输出样例#1: 复制
4
思路:搜索。深搜最多只有20分!!
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
struct nond{int x,y,z,step;
};
queue<nond>que;
int n,m,ans=0x7f7f7f7f;
int dx[8]={1,-1,0,0,-1,-1,1,1};
int dy[8]={0,0,1,-1,1,-1,1,-1};
int map[110][110],vis[110][110][8];
int main(){scanf("%d%d",&n,&m);for(int j=1;j<=m;j++)for(int i=1;i<=n;i++)scanf("%d",&map[i][j]);nond tmp;tmp.x=1;tmp.y=1;tmp.z=-1;tmp.step=0;que.push(tmp);while(!que.empty()){nond now=que.front();que.pop();for(int i=0;i<8;i++){int cx=now.x+dx[i]*map[now.x][now.y];int cy=now.y+dy[i]*map[now.x][now.y];if(cx>=1&&cx<=n&&cy>=1&&cy<=m&&i!=now.z&&!vis[now.x][now.y][i]){if(cx==n&&cy==m){ cout<<now.step+1;return 0; }nond c;c.x=cx;c.y=cy;c.step=now.step+1;c.z=i;vis[now.x][now.y][i]=1;que.push(c);}}}cout<<"NEVER";
}

 

 

转载于:https://www.cnblogs.com/cangT-Tlan/p/8215281.html

这篇关于洛谷 P1301 魔鬼之城的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/415187

相关文章

高精度计算(代码加解析,洛谷p1601,p1303)除法待更新

目录 高精度加法 高精度减法 高精度乘法 高精度加法 我们知道在c++语言中任何数据类型都有一定的表示范围。当两个被加数很大时,正常加法不能得到精确解。在小学,我们做加法都采用竖式方法。那么我们也只需要按照加法进位的方式就能得到最终解。 8 5 6+ 2 5 5-------1 1 1 1 加法进位: c[i] = a[i] + b[i];if(c[i] >=

洛谷 凸多边形划分

T282062 凸多边形的划分 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 先整一个半成品,高精度过两天复习一下补上 #include <iostream>#include <algorithm>#include <set>#include <cstring>#include <string>#include <vector>#include <map>

能量项链,洛谷

解释:  环形dp问题还是考虑将环拉直,可以参考我上一篇文章:环形石子合并 [2 3 5 10 2] 3 5 10 将环拉直,[]内是一个有效的区间,可以模拟吸收珠子的过程,         如[2 3 5] <=>(2,3)(3,5)    2是头,3是中间,5是尾 len >= 3:因为最后[2 10 2]是最小的可以合并的有效区间 len <= n + 1因为[2 3

洛谷P5490扫描线

0是最小的数字,将一个线段看成一个区间,对于一个矩形,从下扫到上,入边为1,而出边为-1,意思是将这个区间上的所有点加1(区间修改).把线段表示为Line[i],其中记录了l,r,h,tag,左右端点,高度,入边还是出边(1或-1) 那么每次区间修改后不为0的区间它的值可能是1,2,3或者是其它数字,这不好统计,可以将它转化一下,0是不是表示没有被覆盖过的地方,我们只要统计0的个数然后用总长减去

挤牛奶洛谷uasco

题目描述 三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶。第一个农民在300秒(从5点开始计时)给他的牛挤奶,一直到1000秒。第二个农民在700秒开始,在 1200秒结束。第三个农民在1500秒开始2100秒结束。期间最长的至少有一个农民在挤奶的连续时间为900秒(从300秒到1200秒),而最长的无人挤奶的连续时间(从挤奶开始一直到挤奶结束)为300秒(从1200秒到1500秒)。

洛谷刷题(7)

P8738 [蓝桥杯 2020 国 C] 天干地支 题目描述 古代中国使用天干地支来记录当前的年份。 天干一共有十个,分别为:甲(jiǎ)、乙(yǐ)、丙(bǐng)、丁(dīng)、戊 (wù)、己(jǐ)、庚(gēng)、辛(xīn)、壬(rén)、癸(guǐ)。 地支一共有十二个,分别为:子(zǐ)、丑(chǒu)、寅(yín)、卯(mǎo)、辰(chén)、巳(sì)、午(wǔ)、

魔鬼面试官:用户在电商网站中购买成功了,那么它在微服务中经历了什么?...

点击上方“朱小厮的博客”,选择“设为星标” 做积极的人,而不是积极废人 面试的时候,面试官问:用户在电商网站中购买成功了,那么它在微服务中经历了什么?你该如何作答?  当我傻啊,用户在电商网站购买成功,还在微服务中,那肯定就是有一套微服务架构的电商系统。 设计一套电商系统还不简单?简单想象一下,既然是一个电商系统,有用户去购买,就肯定得有一个用户模块,购买什么东西总不是西北风吧,购买肯定是

肌肉魔鬼操

海军陆战队的训练被称为魔鬼训练,不过并不是每个男人都有机会亲身接受这种魔鬼训练,不可否认的是,陆战队的操练课程对于体型修改及体能锻炼有极佳的效果。    这套训练操是由国外海军陆战队战操演变而来的,没有时间去健身房的人可以通过以下10个动作的练习既可以健身,又可以拥有令人羡慕的身材。练完之后,相信你一定可以成为满身肌肉的猛男。    一、收腹抬腿    双腿并拢仰卧,双手放于臀部,然后以臀部

C++ 洛谷 哈希表(对应题库:哈希,hash)习题集及代码

马上就开学了,又一个卷季,不写点东西怎么行呢?辣么,我不准备写那些dalao们都懂得,熟练的,想来想去,最终还是写哈希表吧!提供讲解&题目&代码解析哦! 奉上题目链接: 洛谷题目 - 哈希,hash 1、哈希、哈希表(hash)简介 哈希(Hash)是一种将任意长度的输入映射为固定长度输出的算法。哈希函数的输出值称为哈希值或散列值。哈希函数具有以下特性: 确定性:对于相同的输入

洛谷p2236彩票题解

题目描述 某地发行一套彩票。彩票上写有 1 到 M 这 M 个自然数。彩民可以在这 M 个数中任意选取 N 个不同的数打圈。每个彩民只能买一张彩票,不同的彩民的彩票上的选择不同。 每次抽奖将抽出两个自然数 X 和 Y。如果某人拿到的彩票上,所选 N 个自然数的倒数和,恰好等于 X/Y,则他将获得一个纪念品。 已知抽奖结果 X 和 Y。现在的问题是,必须准备多少纪念品,才能保证支付所有获奖者的