题干
C++实现
#include <iostream>
#include <stdio.h>
#include <queue>
#include <unordered_map>
using namespace std;
int main()
{
int len;
scanf("%d",&len);
char strArr[20] = {0};
scanf("%s",strArr);
if(len < 4){
printf("-1\n");
return 0;
}
string str = strArr;
queue<string> toVisit;
toVisit.push(str);
unordered_map<string,int> distanceMap;
distanceMap.insert({str,0});
while(toVisit.empty() == false){
string cur = toVisit.front();
if(cur.find("2012") != string::npos){
printf("%d\n",distanceMap[cur]);
break;
}
toVisit.pop();
for(int i = 0; i < cur.size()-1 ;++i){
string next = cur;
char temp = next[i];
next[i] = next[i+1];
next[i+1] = temp;
if(distanceMap.count(next) == 0){
toVisit.push(next);
distanceMap.insert({next,distanceMap[cur]+1});
}
}
}
if(toVisit.empty() == true){
printf("-1\n");
}
system("pause");
return 0;
}