题目描述

给出起点和终点的坐标及接下来T个时刻的风向(东南西北),每次可以选择顺风偏移1个单位或者停在原地。求到达终点的最少时间。

如果无法偏移至终点,输出“-1”。

输入输出格式

输入格式:

第一行两个正整数x1,y1,表示小明所在位置。

第二行两个正整数x2,y2,表示小明想去的位置。

第三行一个整数T,表示T个时刻。

第四至第N+3行,每行一个字符,表示风向,即东南西北的英文单词的首字母。

输出格式:

最少走多少步。

输入输出样例

输入样例#1:

1 1
2 2
5
E
N
W
W
N

输出样例#1:

2

输入样例#2:

1 1
2 2
1
W

输出样例#2:

-1

输入样例#3:

1 1
2 2
3
W
W
W

输出样例#3:

-1

说明

样例1:向东走一步,向南走一步。

样例2、3:无法到达。

1<=T<=50

东:East

南:South

西:West

北:North

【分析】:注意:风从哪里来,就叫什么风,就往相反的方向走。

这个题是一个简单的模拟和搜索;只需要关注你要往哪里走,走多少步。

将一个二维数组分解,得到初始点和终点四个值;

最短路径就是分开跳,直至跳完,在验证是否到了终点;

//搜索

【代码】:

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int a,x,y,xx,yy;
char f[50];
int cnt=0;
int main()
{cin>>x>>y;cin>>xx>>yy;cin>>a;for(int i=1;i<=a;i++){cin>>f[i];if(x>xx&&f[i]=='S') { x-=1;cnt++;}if(x<xx&&f[i]=='N') { x+=1;cnt++;}if(y>yy&&f[i]=='W') { y-=1;cnt++;}if(y<yy&&f[i]=='E') { y+=1;cnt++;}}if(x!=xx||y!=yy) cout<<"-1";else cout<<cnt;
}

模拟

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char t;  //t用来输入方向。
int next[4][2]={{1,0},{0,1},{-1,0},{0,-1}},book[1000][1000],way[1000],startx,starty,endx,endy,n,i,ans=999999; //book用来标记一个点走没走过,way储存了每一秒的风向。
int min(int x,int y)
{return x<y?x:y;
}
int getnum(char c) //这个函数用来判断是东西南北里的哪一项。
{if(c=='N'){return 0;}if(c=='E'){return 1;}if(c=='S'){return 2;}if(c=='W'){return 3;}
}
void dfs(int x,int y,int now,int step) //step是现在几秒了,now是步数。
{if(x==endx && y==endy) //如果到达。
    {ans=min(ans,now); //更新答案return;}if(step==n+1) //这里很重要,不然会RE。
    {return;}int tx,ty,k;k=way[step];tx=x+next[k][0];ty=y+next[k][1];if(tx>=1 && tx<=n && ty>=1 && ty<=n && book[tx][ty]==0) //如果这一秒风吹我走没有越界也没有来过这就代表可以走
    {book[tx][ty]=1; //标记这儿我已走过了。dfs(tx,ty,now+1,step+1); //步数加一,秒数加一book[tx][ty]=0; //回溯
    }dfs(x,y,now,step+1); //就是这一秒我不走。return;
}
int main()
{scanf("%d %d",&startx,&starty);scanf("%d %d",&endx,&endy);scanf("%d",&n);for(i=1;i<=n;i++){scanf("%c\n",&t); way[i]=getnum(t); //将每一秒的风向储存好。
    }dfs(startx,starty,0,1);if(ans==999999) //如果ans还是999999,就说明到不了。
    {puts("-1");}else{printf("%d",ans);}return 0;
}

DFS

转载于:https://www.cnblogs.com/Roni-i/p/7650751.html

洛谷 P2689 东南西北【模拟/搜索】相关推荐

  1. 洛谷 2921 记忆化搜索 tarjan 基环外向树

    洛谷 2921 记忆化搜索 tarjan 传送门 (https://www.luogu.org/problem/show?pid=2921) 做这题的经历有点玄学,,起因是某个random题的同学突然 ...

  2. 简单 洛谷 P1563 【模拟】玩具谜题普及场

    ** 简单 洛谷 P1563 [模拟]玩具谜题普及场** 小南有一套可爱的玩具小人, 它们各有不同的职业. 有一天, 这些玩具小人把小南的眼镜藏了起来. 小南发现玩具小人们围成了一个圈,它们有的面朝圈 ...

  3. 洛谷P1074 靶形数独 [搜索]

    题目传送门 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了 ...

  4. 【洛谷】【博弈搜索】P4363 [九省联考2018]一双木棋chess

    洛谷 P4363 [九省联考2018]一双木棋chess 题目大意 ◇题目传送门◆ 分析 根据题目所给定的规则,可以发现对于每一行,其下面一行上放的棋子数目不可能多于上面的一行. 所以我们可以将每行上 ...

  5. 洛谷P5594 [XR-4] 模拟赛C++ 思路加代码

    这道题水题一个 题目闪回 本蒟蒻只会发水题 作为洛谷灌水区大水桶,今天第一次发文章,主要是看那些题解里的大佬,做法有点太大佬了一点点,用了结构体什么的,对新​​​​​​ju手ruo过于的不友善,所以今 ...

  6. 任尔东西南北风(洛谷P2689题题解,Java语言描述)

    送诗一首 <竹石> 作者:郑燮 咬定青山不放松,立根原在破岩中. 千磨万击还坚劲,任尔东西南北风. 题目要求 P2689题目链接 分析 这题有毛病诶,你看他说"抵达终点的最短时间 ...

  7. AC日记——潜伏者 洛谷 P1071 (模拟)

    题目描述 R 国和 S 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于 S 国的 R 国间谍小 C 终于摸清了 S 国军用密码的编码规则: 1. S 国军方内部欲发送的原 ...

  8. 洛谷P5594-【XR-4】模拟赛(模拟)

    题目描述: X 校正在进行 CSP 前的校内集训. 一共有 nnn 名 OIer 参与这次集训,教练为他们精心准备了 mmm 套模拟赛题. 然而,每名 OIer 都有各自的时间安排,巧合的是,他们在接 ...

  9. 洛谷P5594-【XR-4】模拟赛

    题目描述 X 校正在进行 CSP 前的校内集训. 一共有 nn 名 OIer 参与这次集训,教练为他们精心准备了 mm 套模拟赛题. 然而,每名 OIer 都有各自的时间安排,巧合的是,他们在接下来的 ...

最新文章

  1. 使用Qt作窗口截屏(含源码)
  2. 关于大数据与机器学习,小白和牛人之间15个典型问答精华整理上篇
  3. Python多任务(4.多线程--Python中的互斥锁和死锁)
  4. C++11之异步调用
  5. 轻量级NuGet—BaGet
  6. php mysql 云虚拟机_虚拟机+apache+php+mysql 环境安装配置
  7. 解决Mac安装软件的“已损坏,无法打开。 您应该将它移到废纸篓”问题
  8. oracle角色与权限
  9. java如何获取文件路径_java如何获取文件路径
  10. Quartus II 12.0 下载、安装和破解
  11. 计算机仿真塞曼效应实验报告,实验报告模板
  12. 有关MATLAB归一化处理中,mapminmax的用法详解
  13. 生信入门(二)fastqc 生成的.html解读
  14. C语言快速 入门 一篇就够
  15. 干货 | 95后运维小哥20天+通过Elastic认证考试经验分享
  16. windows中的出站和入站规则
  17. Leetcode刷题 Day4~Day5
  18. 使用晨曦记账本,记录流水账及记录借还款
  19. MediaFire – 美国无限容量免费网络硬盘
  20. ArcGIS基础实验操作100例--实验66符号图层的保存与加载

热门文章

  1. C语言实现单链表面试题汇总
  2. mysql导出数据 程序_mysql导出数据
  3. python优雅编程_Python优雅地可视化数据
  4. 服务器在行例维护中,8月14日服务器例行维护公告
  5. android arm 寄存器,ARM汇编
  6. 怎么创建计算机快捷方式到桌面两种方法,使用脚本主机创建Windows快捷方式 - Windows Client | Microsoft Docs...
  7. Linux Ubuntu 16.04系统下可用的Windows应用
  8. (扩展欧几里德算法)zzuoj 10402: C.机器人
  9. s2sh框架搭建(辅助工具:MyEclipse)及解决一些遇到的问题
  10. php解析js的 arraybuffer_JS的所谓的第七种数据类型Symbol