密码锁 vis四维

现在一个紧急的任务是打开一个密码锁。密码由四位数字组成,每个数字从 11 到 99 进行编号。每次可以对任何一位数字加 11 或减 11。当将9加 11 时,数字将变为1,当1减 11 的时,数字将变为9。你也可以交换相邻数字,每一个行动记做一步。现在你的任务是使用最小的步骤来打开锁。注意:最左边的数字不与最右边的数字相邻。

输入格式

第一行输入四位数字,表示密码锁的初始状态。

第二行输入四位数字,表示开锁的密码。

输出格式

输出一个整数,表示最小步骤。

#include
#include
struct node {int num[4];int d;
}first,last,q[100000];
int vis[15][15][15][15];
int l,r;
int ans;
int isKey(struct node a,struct node b) {return a.num[0]==b.num[0]&&a.num[1]==b.num[1]&&a.num[2]==b.num[2]&&a.num[3]==b.num[3];
}
int isVisit(struct node a) {return vis[a.num[0]][a.num[1]][a.num[2]][a.num[3]]==1;
}
int bfs() {l=0,r=0;vis[first.num[0]][first.num[1]][first.num[2]][first.num[3]]=1;struct node t={first.num[0],first.num[1],first.num[2],first.num[3],0};q[r++]=t;while(l=0;i--) {first.num[i]=x%10;x/=10;last.num[i]=y%10;y/=10;}first.d=last.d=0;ans=bfs();printf("%d",ans);return 0;}

 

 

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部