青铜莲花池

Farmer John为了满足宁智贤对美的享受而安装了人工湖。矩形的人工湖分成
M行N列(1 <= M <= 30; 1 <= N <= 30)的方形小格子。有些格子有美丽的荷
叶,有些有岩石,剩下的格子有的只是美丽的蓝色湖水。
宁智贤通过从一片荷叶跳到另一片荷叶上来练习芭蕾。它现在正站在一片荷叶
上(看输入数据了解具体位置)。它希望通过在荷叶上跳跃来到达另一片荷叶。
它既不能跳到水里也不能跳到岩石上。
只有新手才会感到吃惊:宁智贤的跳跃有点类似国际象棋中马那样的移动,在一
个方向上(如水平方向)移动M1(1 <= M1 <= 30)“格”,然后再在另一个方向上(如竖直方向)移动M2 (1 <= M2 <= 30; M1 != M2)格,所以宁智贤有时可能有多达8中的跳跃选择。
给出池塘的构造以及宁智贤跳跃的形式,找出宁智贤从一个位置移动到另一个位置
所需的最小的跳跃次数。这个跳跃对于所给的测试数据总是可能的。

INPUT:(m,n,m1,n1\\+m*n的map)

4 5 1 2
1 0 1 0 1
3 0 2 0 4
0 1 2 0 0
0 0 0 1 0

输入说明:

宁智贤在第二行的左边开始;她的目的地在第二行的右边。池塘中有几块荷叶和岩石。

OUTPUT:(步数)

2

输出说明:

机智的宁智贤跳到了(1,3)的荷叶上,再跳到目的地。

题解:

在输入是可以很方便的找出stx,sty和enx,eny;然后就是找可以跳的地方。用dx【8】,dy【8】把宁志贤可以跳的方向列举出来;

然后用BFS来找出他可以跳的路径。但是又有一个问题,他所跳的路径不一定是最小的,所以就需要一个记录现在位置的结构体。

 1 #include<iostream>
 2 #include<string>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<cstdio>
 6 #include<cstdlib>
 7 #include<algorithm>
 8 #include<queue>
 9 using namespace std;
10 const int maxn =33;
11 int map[maxn][maxn];
12 struct node{
13     int x,y;
14     int step;
15 }s_pos;
16 int m,n,m1,m2,step;
17 int sx,sy,ex,ey;
18 bool vis[maxn][maxn];
19 bool check(int x,int y){
20      return x>=0&&x<m&&y>=0&&y<n;
21 }
22 void bfs(){
23     int dx[8]={-m1,-m1,m1,m1,-m2,-m2,m2,m2};
24     int dy[8]={m2,-m2,m2,-m2,m1,-m1,m1,-m1};
25     queue<node> q;
26     s_pos.x=sx; s_pos.y=sy; s_pos.step=0;
27     q.push(s_pos);
28     vis[sx][sy]=true;
29     while(!q.empty()){
30         node now = q.front();q.pop();
31         if(now.x==ex&&now.y==ey){
32            step=now.step;return;
33         }
34         for(int i=0;i<8;i++){
35             int nx=now.x+dx[i];  int ny=now.y+dy[i];
36             if(check(nx,ny)&&!vis[nx][ny]&&(map[nx][ny]==1||map[nx][ny]==4)){
37                 node next = now;
38                 next.x=nx;  next.y=ny;  next.step++;
39                 q.push(next);
40                 vis[nx][ny]=true;
41             }
42
43         }
44
45     }
46 }
47 int main(){
48     scanf("%d%d%d%d",&m,&n,&m1,&m2);
49     for(int i=0;i<m;i++) for(int j=0;j<n;j++) scanf("%d",&map[i][j]);
50     for(int i=0;i<m;i++){
51         for(int j=0;j<n;j++){
52            if(map[i][j]==3){
53                sx=i;sy=j;
54            }
55            if(map[i][j]==4){
56                ex=i;ey=j;
57            }
58         }
59     }
60     bfs();
61     printf("%d\n",step);
62     return 0;
63 }  

代码

时间: 2024-10-11 03:58:14

青铜莲花池的相关文章

【bfs】【中等难度】wikioi3055 青铜莲花池

3055 青铜莲花池 题目描述 Description 为了让奶牛们娱乐和锻炼,农夫约翰建造了一个美丽的池塘.这个长方形的池子被分成了M 行N 列个方格(1 ≤ M, N ≤ 30).一些格子是坚固得令人惊讶的莲花,还有一些格子是岩石,其余的只是美丽.纯净.湛蓝的水.贝西正在练习芭蕾舞,她站在一朵莲花上,想跳到另一朵莲 花上去,她只能从一朵莲花跳到另一朵莲花上,既不能跳到水里,也不能跳到岩石上.      贝西的舞步很像象棋中的马步:每次总是先横向移动M1 (1 ≤ M1 ≤ 30)格,再纵向移

青铜莲花池(Bronze Lilypad Pond, USACO 2007 Feb)

题目描述 为了让奶牛们娱乐和锻炼,农夫约翰建造了一个美丽的池塘.这个长方形的池子被分成了 M 行 N 列个方格(1 ≤ M, N ≤ 30) .一些格子是坚固得令人惊讶的莲花,还有一些格子是岩石,其余的只是美丽.纯净.湛蓝的水. 贝西正在练习芭蕾舞,她站在一朵莲花上,想跳到另一朵莲花上去,她只能从一朵莲花跳到另一朵莲花上,既不能跳到水里,也不能跳到岩石上. 贝西的舞步很像象棋中的马步:每次总是先横向移动 M1 (1 ≤ M1 ≤ 30)格,再纵向移动 M2 (1 ≤ M2 ≤ 30, M1≠M2

bzoj1698 / P1606 [USACO07FEB]白银莲花池Lilypad Pond

P1606 [USACO07FEB]白银莲花池Lilypad Pond 转化为最短路求解 放置莲花的方法如果直接算会有重复情况. 于是我们可以先预处理和已有莲花之间直接互相可达的点,将它们连边(对,忽略它们). 于是剩下的就是边权为1的边了. 酱紫我们就成功转化为了边权问题. 蓝后跑跑最短路顺便计个数就解决了. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<queue&

P1606 [USACO07FEB]白银莲花池Lilypad Pond

这个题其实算是个最短路计数,建图的直观思想很简单,但是很显然有一个地方没法处理,就是有的时候通过两条路走到同一个地方的话方案数会计算两次.我们发现加上原有的莲花就很难处理,会计算重复.我们要想办法避免这种情况,一开始想联通块,其实已经差不多了,就是把已经有的互相联通的看成一块,然后和水暴力连边,最后跑裸的最短路就行了.(原来有0边就不能直接跑最短路计数啊). 题干: 为了让奶牛们娱乐和锻炼,农夫约翰建造了一个美丽的池塘.这个长方形的池子被分成了M行N列个方格(1≤M,N≤30).一些格子是坚固得

“渊渟岳峙”厦门行

“渊渟岳峙”厦门行 (2014年8月) 罗大教授 厦门是一个浪漫得令人骨酥的城市,因为有无边碧海摇漾的艳惑,天生风情,便无量地吸引了一大批多彩有梦.倾心憧憬的人. 三日行,人且行,景且绮.回来后,用四个字概括心感的印象,便是“渊渟岳峙”.“ 渊渟”者,潭水深静也:“岳峙”者,高山耸立也.“渊渟岳峙”这个词似乎过于庄重,不灵动,也不飘然,与厦门飞媚的流芳气质不甚匹合.然而天刚擦亮到达厦门时,晨早的青云还来不及白展,火车便驶过宏伟的海上杏林大桥,过眼一片渌波,是刚眠醒大海的眼,渊静微沉,最清凌的视观

[Unity3D]Unity3D圣骑士模仿游戏开发传仙灵达到当局岛

大家好,我是秦培.欢迎关注我的博客.我的博客地址blog.csdn.net/qinyuanpei. 在前面的文章中.我们分别实现了一个自己定义的角色控制器<[Unity3D]Unity3D游戏开发之仿仙剑奇侠传角色控制效果>和角色死亡的效果<[Unity3D]Unity3D游戏开发之仿仙剑奇侠传角色死亡效果实现>.今天我们继续来做点和仙剑相关的东西,首先我们来看一副图: 这幅图呢,是仙剑奇侠传的第一个迷宫场景--仙灵岛的莲花池. 男主角李逍遥为替婶婶求药独闯仙灵岛,在经历了前面的小

涨姿势!北京地铁原来是16条旅游专线

学姐按:周末想带孩子玩,又没太多时间.好不容易有时间出去了,结果半天都被堵在了路上,这让很多家长每逢周末必发愁.为什么不换种方式出行呢?北京的地铁的里程越来越长,殊不知所经之处有很多的大小景点可以玩.今天学姐就带大家细数那些地铁沿线的美景. 一号线 八角游乐园站 石景山游乐园 票价:门票10元,游乐项目另收费 地址:石景山区石景山路 玉泉路站 北京国际雕塑公园 票价:旺季10元,淡季5元 地址:石景山区石景山路2号 军事博物馆站 中华世纪坛 票价:免费 地址:海淀区复兴路甲9号(中央电视台与军事

Unity3D游戏开发之仿仙剑奇侠传仙灵岛机关的实现

我们继续来做点和仙剑相关的东西,首先我们来看一副图: 这幅图呢,是仙剑奇侠传的第一个迷宫场景--仙灵岛的莲花池.男主角李逍遥为替婶婶求药独闯仙灵岛,在经历了前面的小草妖战斗后,李逍遥就来到了 莲花池,这个迷宫的解法很简单,乘坐莲花池中的芦苇垫到不同的地方,然后用破天锤打碎五座阿修罗像,通往仙灵岛的通路就会被打开,就是在仙灵岛李逍遥邂逅了正在沐浴的赵灵儿,仙剑奇侠传的故事从此展开.好了,故事先说到这里,我们来看这里很重要的一个信息:李逍遥踩着芦苇垫到达不同的地方,然后用破天锤打碎石像开启机关.我们

angular 实现自定义样式下拉菜单

自己闲着没事写了一个自定义的下拉菜单希望和大家交流一下!望能和大神们成为朋友. 下面上代码: <!doctype html> <html lang="en" ng-app='App'> <head> <meta charset="UTF-8"> <title>Document</title> <script src='../angular-1.3.9/angular.js'><