【洛谷】P2689 东南西北(dfs|贪心)
P2689 东南西北
题目描述
给出起点和终点的坐标及接下来T个时刻的风向(东南西北),每次可以选择顺风偏移1个单位或者停在原地。求到达终点的最少时间。
如果无法偏移至终点,输出“-1”。
输入输出格式
输入格式:
第一行两个正整数x1,y1,表示小明所在位置。
第二行两个正整数x2,y2,表示小明想去的位置。
第三行一个整数T,表示T个时刻。
第四至第N+3行,每行一个字符,表示风向,即东南西北的英文单词的首字母。
输出格式:
最少走多少步。
输入输出样例
1 1 2 2 5 E N W W N
2
1 1 2 2 1 W
-1
1 1 2 2 3 W W W
-1
说明
样例1:向东走一步,向南走一步。
样例2、3:无法到达。
1<=T<=50
东:East
南:South
西:West
北:North
【题解】【首先要搞清楚一点,这里所说的风向是吹向哪个方向的风而不是我们通常意义上的东西南北风,即N代表当前可以顺风向北走一个单位。还有一点要注意的是这里的坐标的增减是按照平面直角坐标系的原则的,即向北纵坐标增大,向东横坐标增大】
【dfs每一时刻都有顺风行走和不动两种状态,然后 dfs下一时刻的行走可能。边界:到达目的地或提供的时刻全部用完】
1 #include<cmath> 2 #include<cstdio> 3 #include<cstring> 4 #include<iostream> 5 #include<algorithm> 6 using namespace std; 7 char s[55]; 8 int s0,t0,s1,t1,n,num; 9 void dfs(int x,int y,int f,int t){ 10 if(x==s1&&y==t1) {num=min(t,num); return;} 11 if(f>n) return; 12 if(s[f]=='E') dfs(x+1,y,f+1,t+1); 13 if(s[f]=='W') dfs(x-1,y,f+1,t+1); 14 if(s[f]=='S') dfs(x,y-1,f+1,t+1); 15 if(s[f]=='N') dfs(x,y+1,f+1,t+1); 16 dfs(x,y,f+1,t); 17 return; 18 } 19 int main(){ 20 int i; 21 scanf("%d%d%d%d%d\n",&s0,&t0,&s1,&t1,&n); 22 for(i=1;i<=n;++i) scanf("%c\n",&s[i]); 23 num=1000000000; 24 dfs(s0,t0,1,0); 25 if(num==1000000000) printf("-1\n"); 26 else printf("%d\n",num); 27 return 0; 28 }
【贪心,我们知道,从一个点到另一个点的图上最短路就是两点的横坐标差+纵坐标差,与路线无关,因此只需判断所给的所有风向是否能满足横坐标和纵坐标的变更需求即可】
#include<cstdio> #include<cstring> #include<iostream> using namespace std; char c; int x0,y0,x1,y1,t,n,e,w,s,ans,p; int main(){int a,b,i;scanf("%d%d%d%d%d",&x0,&y0,&x1,&y1,&t);for(i=1;i<=t;++i){cin>>c;if(c=='E') e++;if(c=='N') n++;if(c=='S') s++;if(c=='W') w++;}a=x1-x0; b=y1-y0; if(a>0)if(a<=e) p++;if(a<0) {a=-a;if(a<=w) p++;}if(a==0) p++;if(p){if(b>0)if(b<=n) p++;if(b<0){b=-b;if(b<=s) p++;}if(b==0) p++;}if(p==2) printf("%d",a+b);else printf("-1");return 0; }
转载于:https://www.cnblogs.com/lris-searching/p/9472856.html
【洛谷】P2689 东南西北(dfs|贪心)相关推荐
- 洛谷 P2689 东南西北【模拟/搜索】
题目描述 给出起点和终点的坐标及接下来T个时刻的风向(东南西北),每次可以选择顺风偏移1个单位或者停在原地.求到达终点的最少时间. 如果无法偏移至终点,输出"-1". 输入输出格式 ...
- 洛谷P1524 十字绣 dfs+思维
前言 最近打算考研去软院,顺便向xmd了解了一点算法岗实习的行情,决定重拾算法能力,多多刷题. 现在在刷洛谷的题单和vijos的训练计划,听很多同学说leetcode很不错,打算把vj的训练计划刷完后 ...
- 洛谷P1080-国王游戏-贪心+高精度
P1080-国王游戏 啊啊啊,刚才已经写了一次了,但是Edge浏览器不知道为什么卡住了,难受. 好吧,其实是一道可做题,分析得到的贪心策略就是就是将a * b小的放在前面(其他的懒得说了),主要还是要 ...
- 任尔东西南北风(洛谷P2689题题解,Java语言描述)
送诗一首 <竹石> 作者:郑燮 咬定青山不放松,立根原在破岩中. 千磨万击还坚劲,任尔东西南北风. 题目要求 P2689题目链接 分析 这题有毛病诶,你看他说"抵达终点的最短时间 ...
- 【洛谷】【堆+贪心】P1484 种树
[题目描述:] cyrcyr今天在种树,他在一条直线上挖了n个坑.这n个坑都可以种树,但为了保证每一棵树都有充足的养料,cyrcyr不会在相邻的两个坑中种树.而且由于cyrcyr的树种不够,他至多会种 ...
- [洛谷]P1413 坚果保龄球 (#贪心 -1.18)
题目描述 PVZ这款游戏中,有一种坚果保龄球.zombie从地图右侧不断出现,向左走,玩家需要从左侧滚动坚果来碾死他们. 我们可以认为地图是一个行数为6,列数为60的棋盘.zombie出现的那一秒站在 ...
- 洛谷 P1803题解 java 贪心
题目描述 现在各大 oj 上有 nn 个比赛,每个比赛的开始.结束的时间点是知道的. yyy 认为,参加越多的比赛,noip 就能考的越好(假的). 所以,他想知道他最多能参加几个比赛. 由于 yyy ...
- 洛谷 P1784 数独 dfs
题目描述 数独是根据 9×9 盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个粗线宫内的数字均含 1 - 9 ,不重复.每一道合格的数独谜题都有且仅有唯一答案,推理方法也以此为 ...
- 洛谷P1650:田忌赛马 ← 贪心算法
[题目来源] https://www.luogu.com.cn/problem/P1650 [题目描述] 我国历史上有个著名的故事: 那是在2300年以前.齐国的大将军田忌喜欢赛马.他经常和齐王赛马. ...
- 洛谷 P1325 雷达安装 贪心
**- 将问题转化为区间覆盖问题 此题求的是需要多少个头尾不相交的区间 贪心策略:按区间的左端点排序,若i的左端点与i-1的右端点不相交(在精度范围内)就增加一个区间** #include <i ...
最新文章
- 如何在父进程中读取子(外部)进程的标准输出和标准错误输出结果
- android monitor 汉化
- MYSQL外键(Foreign Key)的使用
- Building Java Projects with Gradle
- Joseph cicyle's algorithm
- 自然语言处理库——NLTK
- 《雪国》—— 读后总结
- Java基础---分支结构(if--else / switch---case)
- android-studio于java相关
- C# winform以阅览模式打开PPT,并控制PPT上下页,轮播
- 怎么用计算机模拟宇宙,为了弄懂宇宙的形成 科学家用电脑模拟了800万个宇宙...
- 浏览器对象模型bom的作用是什么?
- paip.多个TOMCAT共存在一台主机上配置方法
- JMeter安装详细教程
- 博弈论个人的一点小总结
- UVA 10499 正义的土地
- python身高体重程序代码_python EM算法4(身高体重数据集)
- 如何设计H5编辑器中的模版库并实现自动生成封面图
- 22.实战:Kaggle房价预测
- docker制作tomcat镜像并部署war包
热门文章
- 计算机专业综合改革举措,数学与应用数学专业综合改革的举措数学论文(9页)-原创力文档...
- Carsim 2019 安装后打不开 未响应 acquiring licence information
- python统计股票上涨天数
- 关于RHCE考证的那些事
- OkHttp3源码详解(四)缓存策略,万分膜拜
- springboot配置logback
- 攒齐智能产品组合,世界召唤四大超级力量
- mysql从创库到查询基本命令
- Word粘贴时出现“文件未找到:MathPage.WLL”的解决方案
- 旅行者1号探测器已飞出太阳系