#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
int a[4],b[4];
char str[5];
bool vis[11][11][11][11];
struct node{
int digit[4];
int step;
};
bool judge(int t[]){
for(int i=0;i<4;i++){
if(b[i]!=t[i])
return false;
}
return true;
}
void bfs(){
memset(vis,0,sizeof(vis));
node cur,next;
cur.step = 0;
for(int i=0;i<4;i++)
cur.digit[i] = a[i];
vis[a[0]][a[1]][a[2]][a[3]] = 1;
queue<node> q;
q.push(cur);
while(!q.empty()){
cur = q.front();
q.pop();
if(judge(cur.digit)){
printf("%d\n",cur.step);
return;
}
for(int i=0;i<4;i++){ //+1
next = cur;
next.digit[i] += 1;
if(next.digit[i]==10)
next.digit[i] = 1;
if(!vis[next.digit[0]][next.digit[1]][next.digit[2]][next.digit[3]]){
vis[next.digit[0]][next.digit[1]][next.digit[2]][next.digit[3]] = true;
next.step++;
q.push(next);
}
}
for(int i=0;i<4;i++){ //-1
next = cur;
next.digit[i] -= 1;
if(next.digit[i]==0)
next.digit[i] = 9;
if(!vis[next.digit[0]][next.digit[1]][next.digit[2]][next.digit[3]]){
vis[next.digit[0]][next.digit[1]][next.digit[2]][next.digit[3]] = true;
next.step++;
q.push(next);
}
}
for(int i=0;i<3;i++){ //swap
next = cur;
swap(next.digit[i],next.digit[i+1]);
if(!vis[next.digit[0]][next.digit[1]][next.digit[2]][next.digit[3]]){
vis[next.digit[0]][next.digit[1]][next.digit[2]][next.digit[3]] = true;
next.step++;
q.push(next);
}
}
}
}
int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%s",str);
for(int i=0;i<4;i++)
a[i] = str[i]-'0';
scanf("%s",str);
for(int i=0;i<4;i++)
b[i] = str[i]-'0';
bfs();
}
return 0;
}
HDU 1195 bfs
最新推荐文章于 2024-10-10 08:47:47 发布