질문의 의미 :
반복, 로봇, 아래 단계로 이동에 대한 각각의 원점에서 시작하지만 반복 방법을 취할 수있다 질문 최단 경로를 찾아 물었다. 삭제 한 후 시작과 끝 지점에 영향을주지.
아이디어 :
지도를 사용하여, 맵 정의 <쌍 <INT, INT> INT> 입술, 및 한 쌍의 정의에 대응하는 기록 된 각 패스의 좌표 값 <지능, INT> CUR 현재 위치의 움직임을 기록한다 (0,0), , 그렇지 않으면 0을 반환, 반환 1에서 키워드 나타납니다이 있는지 여부를 확인하기 위해지도 기능의 계산이 있었다 여부를 현재 위치를 찾을 수있는 단계를 사용 res.count (현재))를 이동하지 않았다.
코드
#include<iostream>
#include<map>
#include<cstring>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
int main(){
#ifdef _DEBUG
freopen("input.txt", "r", stdin);
#endif
int t;
cin>>t;
while(t--){
int n, l, r;
string s;
cin>>n>>s;
map<pair<int,int>, int> res;//坐标与路径长度额映射
pair<int,int> cur(0,0);
res[cur] = 0;
l = -1, r = n;
for(int i = 0; i < n; i++){
if(s[i] == 'L')
cur.first--;
else if(s[i] == 'R')
cur.first++;
else if(s[i] == 'U')
cur.second++;
else
cur.second--;
if(res.count(cur)){
if(i - res[cur] < r - l){//比较这次的距离是否比上一次的更短
l = res[cur];
r = i;
}
}
res[cur] = i + 1;//每个点到原点的距离
}
if(l == -1)
cout<<-1<<endl;
else
cout<<l + 1<<" "<<r + 1<<endl;
}
return 0;
}