洛谷 P2689 东南西北【模拟/搜索】

题目描述

给出起点和终点的坐标及接下来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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/540489.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单链表遍历_单链表及其遍历实现的基本操作

单链表遍历单链表 (Single linked list) Single linked list contains a number of nodes where each node has a data field and a pointer to next node. The link of the last node is to NULL, indicates end of list. 单个链表包含许多节点&#xff0c;其中每个节点都有一…

[转载] python中for语句用法_详解Python中for循环的使用_python

参考链接&#xff1a; 在Python中将else条件语句与for循环一起使用 这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 “探索 Python&#xff0c;第 5 部分&#xff1a;用 Python 编程” 一文讨论了 if 语句和…

windows 软链接的建立及删除

在windows服务器上有时有这样的需求&#xff0c;你的文件在f:\test中&#xff0c;但由于其它原因用户访问的是e:\test&#xff0c;如果又希望e:\test 中的文件与f:\test的保持同步&#xff0c;除了用同步软件来做外&#xff0c;可以用windows 的文件夹映射来做 cmd: mklink /J …

8086简单的指令流水线_在8086微处理器中执行流水线的指令和概念的步骤

8086简单的指令流水线Any computer or machine works according to some instructions. These instructions are responsible for all the work that the machine does. But how does a machine work to understand and execute that instruction? 任何计算机或机器都按照某些…

[转载] 使用Python编写打字训练小程序

参考链接&#xff1a; 在Python中切换大小写(替换) 你眼中的程序猿 别人眼中的程序猿&#xff0c;是什么样子&#xff1f;打字如飞&#xff0c;各种炫酷的页面切换&#xff0c;一个个好似黑客般的网站破解。可现实呢&#xff1f; 二指禅的敲键盘&#xff0c;写一行代码&#…

shell两个数字相乘_使用8086微处理器将两个16位数字相乘而不带进位

shell两个数字相乘Problem statement: 问题陈述&#xff1a; To perform multiplication operation between 2 16bit numbers with carry using 8086 Microprocessor. 使用8086微处理器在2个16位数字之间进行带进位的乘法运算。 Algorithm: 算法&#xff1a; Load the first…

Dwr 框架简单实例

Dwr 是一个 Java 开源库&#xff0c;帮助你实现Ajax网站。 它可以让你在浏览器中的Javascript代码调用Web服务器上的Java&#xff0c;就像在Java代码就在浏览器中一样。 Dwr 主要包括两部分&#xff1a; 在服务器上运行的 Servlet 来处理请求并把结果返回浏览器。 运行在浏览器…

[转载] Python进阶:设计模式之迭代器模式

参考链接&#xff1a; Python中的迭代器 在软件开发领域中&#xff0c;人们经常会用到这一个概念——“设计模式”&#xff08;design pattern&#xff09;&#xff0c;它是一种针对软件设计的共性问题而提出的解决方案。在一本圣经级的书籍《设计模式&#xff1a;可复用面向对…

JavaScript | 如何为变量分配十进制,八进制和十六进制值?

Just like C programming language, we can assign integer value in the different format to the variable. 就像C编程语言一样 &#xff0c;我们可以将不同格式的整数值分配给变量。 Assigning decimal value: It can be assigned simply without using any prefix. 分配十…

路由器DHCP和DHCP中继的配置

路由器 DHCP和DHCP中继的配置 路由器作为DHCP服务器&#xff1a; 1.配置router的地址&#xff1a;Route(config)# hostname gateway (更改主机名字) Gateway(config)# interface gigabitethernet 0/0 …

[转载] 大数据分析Python For循环教程

参考链接&#xff1a; Python中的迭代器函数1 大数据分析Python除了循环遍历列表之外&#xff0c;for循环还有很多其他功能&#xff0c;在现实世界的数据科学工作中&#xff0c;您可能需要将numpy数组和pandas DataFrames用于其他数据结构的循环。 大数据分析Python For循环教…

node.js 爬虫入门总结

node.js爬虫 前端同学可能向来对爬虫不是很感冒&#xff0c;觉得爬虫需要用偏后端的语言&#xff0c;诸如 php &#xff0c; python 等。当然这是在 nodejs 前了&#xff0c;nodejs 的出现&#xff0c;使得 Javascript 也可以用来写爬虫了。由于 nodejs 强大的异步特性&#xf…

数组重复次数最多的元素递归_使用递归计算链接列表中元素的出现次数

数组重复次数最多的元素递归Solution: 解&#xff1a; Required function: 所需功能&#xff1a; func_occurence ( node *temp) //recursive functionInput: 输入&#xff1a; A singly linked list whose address of the first node is stored in a pointer, say head and…

SecureCRT中文乱码解决方法

服务端export LANGzh_CN.UTF-8客户端SecureCRT编码选择UTF-8客户端SecureCRT字体选择新宋体&#xff0c;字符集选择中文总结&#xff1a;客户端和服务端字符编码一致&#xff0c;客户端字体字符集支持转载于:https://blog.51cto.com/leomars/1972669

[转载] Python 迭代器 深入理解 与应用示例

参考链接&#xff1a; Python | 可迭代和迭代器之间的区别 本篇文章简单谈谈可迭代对象&#xff0c;迭代器和生成器之间的关系。 三者简要关系图 可迭代对象与迭代器 刚开始我认为这两者是等同的&#xff0c;但后来发现并不是这样&#xff1b;下面直接抛出结论&#xff1a; 1…

Python程序查找表示O(1)复杂度的数字所需的位数

Problem statement 问题陈述 Find total Number of bits required to represent a number in binary 查找以二进制表示数字所需的总位数 Example 1: 范例1&#xff1a; input : 10output: 4Example 2: 范例2&#xff1a; input : 32output : 6Formula used: 使用的公式&am…

正则split

string content "第1行导入失败&#xff0c;失败原因为&#xff1a; 《加班原因》字段必填";string[] resultString Regex.Split(content, "失败原因为&#xff1a;", RegexOptions.IgnoreCase);foreach (string i in resultString){Console.WriteLine(i…

将八进制数制转换为二进制,十进制和十六进制数制

1)将八进制数制转换为二进制数制 (1) Conversion of Octal Number System to Binary Number System) To convert octal numbers into binary numbers, we can use the relationship between octal and binary numbers. 要将八进制数转换为二进制数&#xff0c;我们可以使用八进…

[转载] Python的生成器

参考链接&#xff1a; Python中的生成器Generator Python的生成器 什么是生成器 创建python迭代器的过程虽然强大&#xff0c;但是很多时候使用不方便。生成器是一个简单的方式来完成迭代。简单来说&#xff0c;Python的生成器是一个返回可以迭代对象的函数。 怎样创建生…

想提高用户访问的响应速度和成功率还不赶快学习CDN

2019独角兽企业重金招聘Python工程师标准>>> 课程介绍 CDN可以将源站内容分发至最接近用户的节点&#xff0c;使用户可就近取得所需内容&#xff0c;提高用户访问的响应速度和成功率。解决因分布、带宽、服务器性能带来的访问延迟问题&#xff0c;适用于站点加速、点…