题目链接 https://www.acwing.com/problem/content/description/4321/
意思就是一个机器人 通过输入的字符串 进行上下左右走动
如果满足 : 可以构造一个地图 且 行走的路径是起点到终点的最短路径
输出 YES 否则输出NO
如果你在左边可以通过某一点直接走到上下相邻的点,而你却往右走,然后又走到上下的点,那么就不是最短路径
所以每次走了之后,把之前的点的四个方向放入set中,这里我是用的C++11的语法(pair),Dev不设置编译不通过
然后每次走的时候看看走的这个点在不在set中,如果在set中那么就表示不是最短路径
代码如下
#include<bits/stdc++.h> using namespace std; int x,y,tx,ty; set<pair<int,int>> se; int main() { string s; int flag=1,i; cin>>s; se.insert({x,y}); for(i=0;i<s.size();i++) { if(s[i]=='U') tx=x-1,ty=y; if(s[i]=='D') tx=x+1,ty=y; if(s[i]=='L') tx=x,ty=y-1; if(s[i]=='R') tx=x,ty=y+1; if(se.count({tx,ty})) { flag = 0; break; }else{ se.insert({x-1,y}); se.insert({x+1,y}); se.insert({x,y-1}); se.insert({x,y+1}); } x=tx,y=ty; } if(flag==0) cout<<"NO"; else cout<<"YES"; }