题目链接 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";
}