题目描述

给出起点和终点的坐标及接下来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. Dilworth定理证明

    命题:偏序集能划分成的最少的全序集的个数与最大反链的元素个数相等. (离散数学结构第六版课本P245:把一个偏序集划分成具有全序的子集所需要的最少子集个数与元素在偏序下都是不可比的最大集合的基数之间有 ...

  2. Java 处理 XML 的三种主流技术及介绍

    Java 处理 XML 的三种主流技术及介绍 原文地址:https://www.ibm.com/developerworks/cn/xml/dm-1208gub/ XML (eXtensible Ma ...

  3. Install the Active Directory Administration Tools on Windows Server

    安装 Active Directory 管理工具 To manage your directory from an EC2 Windows instance, you need to install ...

  4. xmlns:sys="clr-namespace:System;assembly=mscorlib" NOTE: System;与assembly中间不能有空格

    xmlns:sys="clr-namespace:System;assembly=mscorlib"  NOTE: System;与assembly中间不能有空格 否则报错, Er ...

  5. jsp中路径的问题。。。

    刚刚学jsp的时候都是从看别人的代码,模仿着做,但是这样也有看不懂的地方,这个相对路径和绝对路径就让我纠结了好久..所以我自己弄了一个demo实验了一下,试验出结果了,但是不明白原理,纠结了一天,终于 ...

  6. C#三层中的分页

    最近写了一个winform的管理系统,里面的分页同学推荐了几种,感觉都不好用,比较麻烦,自己就找了一个比较简单的分页,利用数据存储过程来分页. reate proc usp_User@pageInde ...

  7. AtCoder Regular Contest 075 D Widespread

    题目传送门 这道题其实二分一下答案就okay了的 不过LL什么的有时候忘了加 被卡了下 #include<cstdio> #include<cstring> #include& ...

  8. 【EOJ3652】乘法还原(二分图)

    题意: 思路:Orz Claris 先找出所有平方项,将与有平方项的数有关的数对暂时忽略,剩下的直接连边就是一张二分图,暴力DFS染色 将有平方项的数两边都加一个,再判字典序即可 我不会判字典序……耽 ...

  9. [POJ1082&POJ2348&POJ1067&POJ2505&POJ1960]简单博弈题总结

    鉴于时间紧张...虽然知道博弈是个大课题但是花一个上午时间已经极限了... 希望省选过后再回过头来好好总结一遍吧. 接下来为了看着顺眼一点...还是按照难度顺序吧   POJ1082 一道最简单的博弈 ...

  10. NYOJ 284 坦克大战 (广搜)

    题目链接 描述 Many of us had played the game "Battle city" in our childhood, and some people (li ...