洛谷 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.pswp.cn/news/540489.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/540489.shtml
英文地址,請注明出處:http://en.pswp.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;適用于站點加速、點…