魔鬼之城

题目描述

在一个被分割为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

分析:
一道简单的BFS???(大雾)对于每个位置直接BFS就完事了,只要注意一下判断该点从每个方向是否来过即可。

CODE:
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
const int M=105;
const int xcor[10]={0,1,0,-1,1,-1,-1,1};
const int ycor[10]={1,0,-1,0,1,-1,1,-1};
bool vis[M][M][10];
int n,m,ans=1<<20;
int a[M][M];
struct node{int xnow,ynow,tot,last;
};
int get(){int res=0,f=1;char c=getchar();while (c>'9'||c<'0') {if (c=='-') f=-1;c=getchar();}while (c<='9'&&c>='0'){res=(res<<3)+(res<<1)+c-'0';c=getchar();}return res*f;
}
queue<node> q;
void bfs(){q.push((node){1,1,0,-1});while (!q.empty()){node x=q.front();q.pop();//cout<<x.xnow<<" "<<x.ynow<<" "<<x.tot<<" "<<x.last<<endl; if (x.xnow==m&&x.ynow==n) ans=min(ans,x.tot);//cout<<ans<<endl;for (int i=0;i<=7;i++){if (x.last==i) continue;int lastx=x.xnow+xcor[i]*a[x.xnow][x.ynow];int lasty=x.ynow+ycor[i]*a[x.xnow][x.ynow];if (lastx>m||lastx<1) continue;if (lasty>n||lasty<1) continue;if (vis[lastx][lasty][i]) continue;q.push((node){lastx,lasty,x.tot+1,i});vis[lastx][lasty][i]=true;}}return ;
}
int main(){n=get(),m=get();//n是列,m是行 for (int i=1;i<=m;i++)for (int j=1;j<=n;j++)a[i][j]=get();bfs();if (ans==1<<20) printf ("NEVER\n"); else printf ("%d\n",ans);return 0;
}
 

 

 

转载于:https://www.cnblogs.com/kanchuang/p/11503053.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1619880.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

心灵毒药之CIA篇(二)

2019独角兽企业重金招聘Python工程师标准>>> 工欲善其事,必先利其器,而且最好是最锋利,最合适的器.因为器能成为你身体的延伸部分,同时还可以成为你信心的来源. 磨器的耐心,用器的巧心,藏器的无心. 转载于:https://my.oschina.net/piginwind/blog/713487

啊,万恶的this

一、全局下&#xff0c;this一般都指向window 全局下&#xff0c;ES5非严格模式&#xff0c;下面的this都是window。 console.log(this); function abc(){console.log(this); } abc();二、对象中的this 1、最常见的this情况&#xff1a; var a100;var obj{a:1,b:function()…

关押罪犯

题目&#xff1a; 描述S 城现有两座监狱&#xff0c;一共关押着 NNN 名罪犯&#xff0c;编号分别为 111 ~ NNN。他们之间的关系自然也极不和谐。 很多罪犯之间甚至积怨已久&#xff0c;如果客观条件具备则随时可能爆发冲突。 我们用 “怨气值”&#xff08;一个正整数值&#…

罪恶

&#xff0d;&#xff0d;&#xff0d;&#xff0d; 罪恶 还是属于闲得慌&#xff0c;瞎拍。也许您会帮我想个更棒的标题&#xff0c;或者干脆叫“无题”。 转载于:https://www.cnblogs.com/hzy5901/archive/2010/03/16/5871737.html

游戏开发学什么?四步修炼骨灰级高手

游戏开发学什么&#xff1f;四步修炼骨灰级高手 近日App Store公布了2013年年度最佳游戏奖项&#xff0c;复古风格的捕鱼游戏《奇葩钓鱼》荣获了iPhone平台上年度最佳游戏的殊荣&#xff0c;拥有独特视觉效果的横版冒险游戏《罪恶之地》夺得了iPad平台上年度最佳游戏的桂冠。…

代码随想录打卡—day42—【DP】— 8.27 01背包基础

1 01背包基础 背包概述&#xff1a; 1.1 01背包是什么 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 1.2 01背包二维数组 二维数组还…

3D飞镖游戏源码ios版

一款ios 3D飞镖游戏源码,通过物理引擎和重力感应来控制飞镖向目标物体击中&#xff01;游戏比较简单&#xff0c;可以学习一下3D游戏的基本开发. 源码下载&#xff1a; http://code.662p.com/view/6262.html 开发平台&#xff1a; 在xcode 4.3编译通过&#xff0c;iphone4&am…

PS飞镖靶的制作

首先我们在Ps中新建一个600像素*600像素的画布&#xff0c;设置分辨率300/200都可以。 步骤如下&#xff1a; 1.拉出两条参考线&#xff0c;一条垂直居中&#xff0c;一条水平居中。 2.用椭圆工具在两参考线中心点拉出一个圆形&#xff0c;设置颜色红色。用矩形选框工具裁剪掉3…

[SCOI2011]飞镖[数学模拟]

2335: [SCOI2011]飞镖 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 482 Solved: 152[Submit][Status][Discuss] Description 飞镖是在欧洲颇为流行的一项运动。它的镖盘上分为20个扇形区域&#xff0c;分别标有1到20的分值&#xff0c;每个区域中有单倍、双倍和三倍的区…

【题解】[SCOI2011] 飞镖

模拟题 红靶子的我们先不考虑。 如果是 {1,2,2} &#xff0c; {2,2,3} 这种只涉及两种倍数的话&#xff0c;我们想到不定方程&#xff1a; axby c 的通解形式&#xff08;a,b,c 为常数&#xff09;&#xff0c;从而探讨 x,y 在规定取值内是否有解。 探讨 {1,2,3} 的情况。 …

搭载双筒飞镖?这款无人机太危险

折叠式的设计使之方便携带&#xff0c;堪称猎犬好搭档。 近日&#xff0c;基于SuperDrone无人机&#xff0c;南非Haevic公司改造了一款搭载飞镖枪的无人机——DartDrone&#xff0c;专为兽医及狩猎人员研发。 据悉&#xff0c;SuperDrone是一款采用可折叠结构的六翼无人机&…

BZOJ2335: [SCOI2011]飞镖

Description 飞镖是在欧洲颇为流行的一项运动。它的镖盘上分为20个扇形区域&#xff0c;分别标有1到20的分值&#xff0c;每个区域中有单倍、双倍和三倍的区域&#xff0c;打中对应的区域会得到分值乘以倍数所对应的分数。例如打中18分里面的三倍区域&#xff0c;就会得到54分。…

飞镖(bzoj 2335)

Description 飞镖是在欧洲颇为流行的一项运动。它的镖盘上分为20个扇形区域&#xff0c;分别标有1到20的分值&#xff0c;每个区域中有单倍、双倍和三倍的区域&#xff0c;打中对应的区域会得到分值乘以倍数所对应的分数。例如打中18分里面的三倍区域&#xff0c;就会得到54分。…

飞镖和招聘

4月16日 公司里面玩飞镖的同事越来越多了&#xff0c;不少人都得了飞镖综合症&#xff08;手酸、腰酸、对休息时间非常敏感&#xff09;。除了飞镖游戏本身的吸引力&#xff0c;我还发现它有很多和我们从事猎头 招聘非常相似的特征&#xff1a; Know how to close the game. 懂…

java设计飞镖游戏_3分钟手把手带你使用Unity制作“扔飞镖游戏”

原标题&#xff1a;3分钟手把手带你使用Unity制作“扔飞镖游戏” 日落西山红霞飞~战士打靶把营归呀巴扎嘿。今天我制作一个简单的打靶游戏(扔飞镖) 在制作之前首先要思考这个游戏需要什么对象&#xff0c;很简单&#xff0c;一只飞镖、一个靶。 这里我把飞镖设置成了刚体&#…

Leetcode——1453. 圆形靶内的最大飞镖数量

墙壁上挂着一个圆形的飞镖靶。现在请你蒙着眼睛向靶上投掷飞镖。 投掷到墙上的飞镖用二维平面上的点坐标数组表示。飞镖靶的半径为 r 。 请返回能够落在 任意 半径为 r 的圆形靶内或靶上的最大飞镖数。 示例 1&#xff1a; 输入&#xff1a;points [[-2,0],[2,0],[0,2],[0,-…

打印飞镖图形

打印如图下非标 代码如下 #define _CRT_SECURE_NO_WARNINGS #pragma warning(disable:6031) #include<stdio.h> #include<string.h> int main() {int n 0;while (scanf("%d", &n) 1){//上n行int i 0;for (i 0; i < n; i){int j 0;for (j 0…

【数据结构与算法】之深入解析“圆形靶内的最大飞镖数量”的求解思路与算法示例

一、题目要求 墙壁上挂着一个圆形的飞镖靶,现在请你蒙着眼睛向靶上投掷飞镖。投掷到墙上的飞镖用二维平面上的点坐标数组表示,飞镖靶的半径为 r,请返回能够落在任意半径为 r 的圆形靶内或靶上的最大飞镖数。示例 1:输入:points = [[-2,0],[2,0],[

【题解】飞镖

题目描述 小明喜欢玩飞镖游戏&#xff0c;他会把每次的得分都记录在数组中。今天有个飞镖大奖&#xff0c;得奖的规则是&#xff1a;如果你4次飞镖的得分先后是&#xff08;a&#xff0c;b&#xff0c;c&#xff0c;d&#xff09;&#xff0c;满足abcd。 小明准备把记录里的其他…

OpenCV技巧篇——多目标视觉定位(以飞镖定位为例)

OpenCV技巧篇【1】——多目标视觉定位&#xff08;以飞镖定位为例&#xff09; 1、针对问题 多目标视觉定位是指通过计算机视觉技术对一张图片中的多个目标进行识别和定位的过程。本篇将以对飞镖定位为例&#xff0c;提出一个简单有效的多目标定位技巧&#xff0c;最终实现如…