wa了的一组数据:
555555 500995
求大神指点
#include<bits/stdc++.h>
using namespace std;
int key,s,shi[7]={0,100000,10000,1000,100,10,1},tp,t1,t6;
struct u{
int s,t,p;
};
queue<u> Q;
bool rec[1000000][7];
int main(){
cin>>s>>key;
Q.push((u){s,0,1});
rec[s][1]=1;
while(!Q.empty())
{
u ft=Q.front(); Q.pop();
if(ft.s==key){
cout<<ft.t;
return 0;
}
tp=ft.s/shi[ft.p]%10;
t1=ft.s/shi[1]%10;
t6=ft.s/shi[6]%10;
if(ft.p!=1&&tp!=t1){
u nx=(u){ft.s-shi[ft.p]*tp-shi[1]*t1+shi[1]*tp+shi[ft.p]*t1,ft.t+1,ft.p};
if(!rec[nx.s][nx.p]){
Q.push(nx);
rec[nx.s][nx.p]=1;
}
}
if(ft.p!=6&&tp!=t6){
u nx=(u){ft.s-shi[ft.p]*tp-shi[6]*t6+shi[6]*tp+shi[ft.p]*t6,ft.t+1,ft.p};
if(!rec[nx.s][nx.p]){
Q.push(nx);
rec[nx.s][nx.p]=1;
}
}
if(tp<9){
u nx=(u){ft.s+shi[ft.p],ft.t+1,ft.p};
if(!rec[nx.s][nx.p]){
Q.push(nx);
rec[nx.s][nx.p]=1;
}
}
if(tp>1){
u nx=(u){ft.s-shi[ft.p],ft.t+1,ft.p};
if(!rec[nx.s][nx.p]){
Q.push(nx);
rec[nx.s][nx.p]=1;
}
}
if(ft.p>1){
u nx=(u){ft.s,ft.t+1,ft.p-1};
if(!rec[nx.s][nx.p]){
Q.push(nx);
rec[nx.s][nx.p]=1;
}
}
if(ft.p<6){
u nx=(u){ft.s,ft.t+1,ft.p+1};
if(!rec[nx.s][nx.p]){
Q.push(nx);
rec[nx.s][nx.p]=1;
}
}
}
u ft=Q.front();
cout<<ft.p<<" "<<ft.t<<endl;
return 0;
}