题目描述
给出起点和终点的坐标及接下来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
思路:这是一道典型的dfs的题目,也可以模拟来做。
#include <iostream>
#include <math.h>
#include <algorithm>
#include <stack>
#include <string.h>
#include <vector>
#include <cstring>
using namespace std;
char a[55];
int n,tmp=0,k=0,ans=0,x,y,ex,ey;
void dfs(int x,int y,int j,int t) {
if(j==n) {
if(x==ex&&y==ey) {
if(k==0)
{
k=1;
cout<<t<<endl;
}
}
return;
}
dfs(x,y,j+1,t);
if(a[j]=='E') {
dfs(x+1,y,j+1,t+1);
} else if(a[j]=='W') {
dfs(x-1,y,j+1,t+1);
}
else if(a[j]=='S') {
dfs(x,y-1,j+1,t+1);
} else if(a[j]=='N') {
dfs(x,y+1,j+1,t+1);
}
}
int main() {
cin>>x>>y>>ex>>ey>>n;
for(int i=0; i<n; i++)
cin>>a[i];
dfs(x,y,0,0);
if(k==0)
cout<<-1<<endl;
return 0;
}