P1301 魔鬼之城

2023-11-23 03:59
文章标签 魔鬼 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

v[i][j][way]表示第i行第j列是其他点走way这个方向走来的。

还有v数组应保存从任一点走到这里的最小步数。

 

#include<bits/stdc++.h>
using namespace std;
int mapa[105][105];
int v[105][105][10];
int dx[9]={0,0,1,1,1,0,-1,-1,-1};
int dy[9]={0,-1,-1,0,1,1,1,0,-1};inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-'){w=-1;}ch=getchar();}while(ch>='0'&&ch<='9'){s=s*10+ch-'0';ch=getchar();}return s*w;
}struct node{int x,y,step,way;
};
queue<node> q;
int main()
{int n,m;memset(v,0,sizeof(v));n=read();m=read();for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){mapa[i][j]=read();}}node start;start.x=1,start.y=1;start.step=0,start.way=9;q.push(start);while(!q.empty()){node now=q.front();q.pop();if(now.x==m&&now.y==n){printf("%d",now.step);return 0;}for(int i=1;i<=8;i++){if(now.way!=i){int tx=now.x+dx[i]*mapa[now.x][now.y];int ty=now.y+dy[i]*mapa[now.x][now.y];int ts=now.step;if(tx<=m&&ty<=n&&tx>=1&&ty>=1&&v[tx][ty][i]==0){v[tx][ty][i]=1;node ans;ans.x=tx,ans.y=ty;ans.step=ts+1,ans.way=i;q.push(ans);}}}}printf("NEVER");
}

 

转载于:https://www.cnblogs.com/hrj1/p/11503841.html

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



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

相关文章

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

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

肌肉魔鬼操

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

魔鬼的细节 1/2

有些国家有些人确实做得不同凡响,成功地秘诀就在于细节。 魔鬼的细节 :/>> 细节>>在接受台湾《天下》杂志采访时,首尔市长李明博举过这样一个例子。“例如市民想在首尔盖一栋房子,必须要先有电力和排水等地下管线的分布图。现在除了到政府单位去办之外,也可以在家里,通过网络下载所有资讯,即使是煤气管线的分布图也能查到。可以做到这样,是得力于全球定位系统的帮助,首尔政府将所有管线的分布整理成档案,放

每个人心里都个魔鬼。

公司搬家,这个周末有三天假,在家堕落了三天,心里不知怎么的,好象又沉淀了一些莫名其妙的东西。在天台上看着圆圆的天,第一个想到的是3D里面的天空球,然后想着想着,开始唤起一些几年前的回忆。回想起曾经也躺在草地上这样看着天,看着天上飘落下来的流行雨;想起也躺在湖面漂泊的小船上,看着这样的看着天,和身边的知心朋友谈心;想起也躺在海边的大石头上,看着漆黑的天,闻着海的气息和浮躁的海的声音。 每个人心里都

冲动是魔鬼,工作不顺心时不要把坏脾气带给家人

今天与一个跟踪了很久的客户准备签合同了,客户突然反悔,为此与他周旋了一整天,忙碌得一口水都没有喝。回到小区坐在车里抽着烟,久久不愿回家,只想一个人坐着,疲惫、无奈。这个月的奖金似乎又将成为泡影。 走进家门,发现儿子正沉迷于游戏的虚拟世界。本来心情郁闷,看到儿子的表现,我怒上心头,大声呵斥儿子,让他立即关闭游戏。跟儿子大喊大叫,发着脾气。 儿子畏缩地告诉我,是妈妈允许他玩一会儿游戏的。妻子闻声从

数字魔鬼

魔鬼数字 Ed Pegg Jr. and Chris Lomont, October 4, 2004 This calls for wisdom. If anyone has insight, let them calculate the number of the beast, for it is man's number. His number is 666. (Revelation

区块链技术:天使 OR 魔鬼?

区块链技术:天使 OR 魔鬼?               最近区块链技术在国外是一个非常火的技术,它被认为是一种颠覆性的技术,是未来的主流技术,但在国内却很少讨论,而我司研究者寥寥,这是我觉得比较吃惊的,所以决定站出来说一说。                         首先,我不想讨论太多深层次的技术问题,而是试图从更加宏观的层面,阐述区块链技术的特点,区块链技术的前景,以及指出

闲人闲谈PS之五十三——离散制造中的魔鬼--物料套裁

惯例闲话:最近和老婆大人商议买车事宜,闲人以为会陷入买油车还是电车的纠结,没想到老婆大人无比坚定,买电车。在买车这方面,老婆的想法居然比闲人超前。闲人对车定位在代步工具,2年前,对车还是印象还是停留在油车靠谱,电池能源密度低、充电时间长。如今再深入了解一下,特别是这次去广汽埃安参观超级工厂之后,发现这个汽车世界完全变样了。所以还是支持了老婆大人的买电车想法。小小感叹下这个瞬息万变的时代——意料之外

lab06:牧师与魔鬼游戏 动作分离版

这里写自定义目录标题 整体描述UML图代码介绍action partcontroller partview part 代码地址 整体描述 本次项目在第一版牧师与魔鬼的基础上,将动作从场记中分离出来,并设计一个裁判类监测游戏进行的。 这样改进的优点: 1.降低了不同功能之间的耦合性,代码的复用性更好。 2.通过门面模式,程序更加容易进行修改。 UML图 参考了经典的cocos

Java中的天使和魔鬼sun.misc.Unsafe

我们在看ConcurrentHashMap源码时经常看到Unsafe类的使用,今天我们来了解下Unsafe类。 Java是一个安全的编程语言,它能最大程度的防止程序员犯一些低级的错误(大部分是和内存管理有关的)。但凡事不是绝对的,使用Unsafe程序员就可以操作内存,因此可能带来一个安全隐患。 这篇文章是就快速学习下sun.misc.Unsafe的公共API和一些有趣的使用例子。 1、Uns