题目
代码
#include<bits/stdc++.h>
using namespace std;
string s1,s2;
bool vis[11][11][11][11];
struct node{
int num[4],step;
}first,last;
int main(){
cin>>s1>>s2;
for(int i=0;i<s1.size();i++){
first.num[i]=s1[i]-'0';
last.num[i]=s2[i]-'0';
}
queue<node> q;
node next ,a;
a=first;
a.step=0;
q.push(first);
vis[a.num[0]][a.num[1]][a.num[2]][a.num[3]]=1;
while(!q.empty()){
a=q.front();
q.pop();
if(a.num[0]==last.num[0] && a.num[1]==last.num[1] && a.num[2]==last.num[2] && a.num[3]==last.num[3]){
cout<<a.step<<endl;
break;
}
for(int i=0;i<4;i++){
next=a;
next.num[i]++;
if(next.num[i]==10){
next.num[i]=1;
}
if(!vis[next.num[0]][next.num[1]][next.num[2]][next.num[3]]){
vis[next.num[0]][next.num[1]][next.num[2]][next.num[3]]=1;
next.step++;
q.push(next);
}
}
for(int i=0;i<4;i++){
next=a;
next.num[i]--;
if(next.num[i]==0){
next.num[i]=9;
}
if(!vis[next.num[0]][next.num[1]][next.num[2]][next.num[3]]){
vis[next.num[0]][next.num[1]][next.num[2]][next.num[3]]=1;
next.step++;
q.push(next);
}
}
for(int i=0;i<3;i++){
next=a;
next.num[i]=a.num[i+1];
next.num[i+1]=a.num[i];
if(!vis[next.num[0]][next.num[1]][next.num[2]][next.num[3]]){
vis[next.num[0]][next.num[1]][next.num[2]][next.num[3]]=1;
next.step++;
q.push(next);
}
}
}
return 0;
}