题目描述

给出起点和终点的坐标及接下来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[];
int cnt=;
int main()
{ cin>>x>>y;
cin>>xx>>yy;
cin>>a;
for(int i=;i<=a;i++)
{
cin>>f[i];
if(x>xx&&f[i]=='S') { x-=;cnt++;}
if(x<xx&&f[i]=='N') { x+=;cnt++;}
if(y>yy&&f[i]=='W') { y-=;cnt++;}
if(y<yy&&f[i]=='E') { y+=;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[][]={{,},{,},{-,},{,-}},book[][],way[],startx,starty,endx,endy,n,i,ans=; //book用来标记一个点走没走过,way储存了每一秒的风向。
int min(int x,int y)
{
return x<y?x:y;
}
int getnum(char c) //这个函数用来判断是东西南北里的哪一项。
{
if(c=='N')
{
return ;
}
if(c=='E')
{
return ;
}
if(c=='S')
{
return ;
}
if(c=='W')
{
return ;
}
}
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+) //这里很重要,不然会RE。
{
return;
}
int tx,ty,k;
k=way[step];
tx=x+next[k][];
ty=y+next[k][];
if(tx>= && tx<=n && ty>= && ty<=n && book[tx][ty]==) //如果这一秒风吹我走没有越界也没有来过这就代表可以走
{
book[tx][ty]=; //标记这儿我已走过了。
dfs(tx,ty,now+,step+); //步数加一,秒数加一
book[tx][ty]=; //回溯
}
dfs(x,y,now,step+); //就是这一秒我不走。
return;
}
int main()
{
scanf("%d %d",&startx,&starty);
scanf("%d %d",&endx,&endy);
scanf("%d",&n);
for(i=;i<=n;i++)
{
scanf("%c\n",&t);
way[i]=getnum(t); //将每一秒的风向储存好。
}
dfs(startx,starty,,);
if(ans==) //如果ans还是999999,就说明到不了。
{
puts("-1");
}
else
{
printf("%d",ans);
}
return ;
}

DFS

洛谷 P2689 东南西北【模拟/搜索】的更多相关文章

  1. 洛谷P2689 东南西北

    https://www.luogu.org/problemnew/show/P2689 #include<iostream> #include<algorithm> using ...

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

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

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

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

  4. 洛谷 P5046 [Ynoi2019 模拟赛] Yuno loves sqrt technology I(分块+卡常)

    洛谷题面传送门 zszz,lxl 出的 DS 都是卡常题( 首先由于此题强制在线,因此考虑分块,我们那么待查询区间 \([l,r]\) 可以很自然地被分为三个部分: 左散块 中间的整块 右散块 那么这 ...

  5. AC日记——导弹拦截 洛谷 P1020 (dp+模拟)

    题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...

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

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

  7. 洛谷P2329 栅栏 [SCOI2005] 搜索

    正解:搜索 解题报告: 先放下传送门! 首先说下爆搜趴,就直接枚每个需求是否被满足以及如果满足切哪个板子,随便加个最优性剪枝,似乎是有80pts 然后思考优化 首先显然尽量满足需求比较小的,显然如果能 ...

  8. 洛谷P1528 切蛋糕 [搜索,二分答案]

    题目传送门 切蛋糕 题目描述 Facer今天买了n块蛋糕,不料被信息组中球球等好吃懒做的家伙发现了,没办法,只好浪费一点来填他们的嘴巴.他答应给每个人留一口,然后量了量每个人口的大小.Facer有把刀 ...

  9. 洛谷P3952 时间复杂度(模拟)

    题意 题目链接 Sol 咕了一年的题解..就是个模拟吧 考场上写的递归也是醉了... 感觉一年自己进步了不少啊..面向数据编程的能力提高了不少 #include<bits/stdc++.h> ...

随机推荐

  1. something about Parameter Estimation (参数估计)

    点估计 Point Estimation 最大似然估计(Maximum Likelihood Estimate —— MLE):视θ为固定的参数,假设存在一个最佳的参数(或参数的真实值是存在的),目的 ...

  2. JavaScript(二):对象、注释、事件!

    对象 JavaScript的一个重要功能就是面向对象的功能,通过基于对象的程序设计,可以用更直观.模块化和可重复使用的方式进行程序开发. 一组包含数据的属性和对属性中包含数据进行操作的方法,称为对象. ...

  3. 2017 湖南省赛 K Football Training Camp

    2017 湖南省赛 K Football Training Camp 题意: 在一次足球联合训练中一共有\(n\)支队伍相互进行了若干场比赛. 对于每场比赛,赢了的队伍得3分,输了的队伍不得分,如果为 ...

  4. 【BZOJ 2006】[NOI2010]超级钢琴 ST

    我们先把所有最左端对应的最优右端入堆,eg: z  在[l,r](由题目给出的L,R决定)之间的最优解 y,然后出堆以后,再入堆z,y-1,z,y+1,那么我们只需要用st找最大前缀和就好了(ST是一 ...

  5. 文件格式转换神器-pandoc

    By francis_hao    Mar 11,2017 介绍 如果你需要在各种类型的文件中穿梭,那么你需要这把瑞士军刀-pandoc 它可以将各种常见的不常见的文件类型转换成另一种,我感兴趣的是在 ...

  6. How do I see what character set a database / table / column is in MySQL?

    Q: How do I see what the character set that a MySQL database, table and column are in? Is there some ...

  7. [spoj DISUBSTR]后缀数组统计不同子串个数

    题目链接:https://vjudge.net/contest/70655#problem/C 后缀数组的又一神奇应用.不同子串的个数,实际上就是所有后缀的不同前缀的个数. 考虑所有的后缀按照rank ...

  8. Different Integers 牛客多校第一场只会签到题

    Given a sequence of integers a1, a2, ..., an and q pairs of integers (l1, r1), (l2, r2), ..., (lq, r ...

  9. Sed basic and practice

    定义:Sed 是针对数据流的非交谈式编辑器,它在命令行下输入编辑命令并指定文件,然后可以在屏幕上看到编辑命令的输出结果. 好处:Sed 在缓冲区内默认逐行处理数据,所以源文件不会被更改和破坏. 格式: ...

  10. php getimagesize()函数获取图片宽度高度

    //php自带函数 getimagesize() $img_info = getimagesize('tomener.jpg'); echo '<pre>'; print_r($img_i ...