博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu1195: Open the Lock
阅读量:5059 次
发布时间:2019-06-12

本文共 4786 字,大约阅读时间需要 15 分钟。

hdu1195: 题意:求解密最少步骤:密码为四位数,每次操作可将一个数加一或减一(1减一变为9,9加一变为1),也可互换相邻数字,求最少需要多少操作数能解密解法:bfs:加一减一和交换位置都属于状态转移 code:
#include
#include
#include
int q[1000*1000][4],v[4],key[4],dis[10][10][10][10],an1[4],bn1[4],cn1[4],dn1[4],an2[4],bn2[4],cn2[4],dn2[4],an[4],bn[4],cn[4],dn[4];const int inf=1<<29;int main(){ int t,i,j,rear,front,a,b,c,d,tt,ttt; scanf("%d",&t); while(t--) { for(i=0;i<=9;i++) for(j=0;j<=9;j++) for(int x=0;x<=9;x++) for(int y=0;y<=9;y++) dis[i][j][x][y]=inf; rear=0;front=0; scanf("%d",&tt); for(j=3;j>=0;j--) { v[j]=tt%10; q[rear][j]=v[j]; tt=tt/10; } rear++; dis[v[0]][v[1]][v[2]][v[3]]=0; scanf("%d",&ttt); for(j=3;j>=0;j--) { key[j]=ttt%10; ttt=ttt/10; } getchar(); while(rear>front) { a=q[front][0];b=q[front][1];c=q[front][2];d=q[front++][3]; for(i=0;i<4;i++) { if(i==0) { if(a==1) { an1[0]=9;bn1[0]=b;cn1[0]=c;dn1[0]=d; an2[0]=2;bn2[0]=b;cn2[0]=c;dn2[0]=d; } else if(a==9) { an1[0]=1;bn1[0]=b;cn1[0]=c;dn1[0]=d; an2[0]=8;bn2[0]=b;cn2[0]=c;dn2[0]=d; } else { an1[0]=a-1;bn1[0]=b;cn1[0]=c;dn1[0]=d; an2[0]=a+1;bn2[0]=b;cn2[0]=c;dn2[0]=d; } } if(i==1) { if(b==1) { an1[1]=a;bn1[1]=9;cn1[1]=c;dn1[1]=d; an2[1]=a;bn2[1]=2;cn2[1]=c;dn2[1]=d; } else if(b==9) { an1[1]=a;bn1[1]=1;cn1[1]=c;dn1[1]=d; an2[1]=a;bn2[1]=8;cn2[1]=c;dn2[1]=d; } else { an1[1]=a;bn1[1]=b-1;cn1[1]=c;dn1[1]=d; an2[1]=a;bn2[1]=b+1;cn2[1]=c;dn2[1]=d; } } if(i==2) { if(c==1) { an1[2]=a;bn1[2]=b;cn1[2]=9;dn1[2]=d; an2[2]=a;bn2[2]=b;cn2[2]=2;dn2[2]=d; } else if(c==9) { an1[2]=a;bn1[2]=b;cn1[2]=1;dn1[2]=d; an2[2]=a;bn2[2]=b;cn2[2]=8;dn2[2]=d; } else { an1[2]=a;bn1[2]=b;cn1[2]=c-1;dn1[2]=d; an2[2]=a;bn2[2]=b;cn2[2]=c+1;dn2[2]=d; } } if(i==3) { if(d==1) { an1[3]=a;bn1[3]=b;cn1[3]=c;dn1[3]=9; an2[3]=a;bn2[3]=b;cn2[3]=c;dn2[3]=2; } else if(d==9) { an1[3]=a;bn1[3]=b;cn1[3]=c;dn1[3]=1; an2[3]=a;bn2[3]=b;cn2[3]=c;dn2[3]=8; } else { an1[3]=a;bn1[3]=b;cn1[3]=c;dn1[3]=d-1; an2[3]=a;bn2[3]=b;cn2[3]=c;dn2[3]=d+1; } } if(dis[an1[i]][bn1[i]][cn1[i]][dn1[i]]>dis[a][b][c][d]+1) { dis[an1[i]][bn1[i]][cn1[i]][dn1[i]]=dis[a][b][c][d]+1; q[rear][0]=an1[i];q[rear][1]=bn1[i];q[rear][2]=cn1[i];q[rear++][3]=dn1[i]; } if(dis[an2[i]][bn2[i]][cn2[i]][dn2[i]]>dis[a][b][c][d]+1) { dis[an2[i]][bn2[i]][cn2[i]][dn2[i]]=dis[a][b][c][d]+1; q[rear][0]=an2[i];q[rear][1]=bn2[i];q[rear][2]=cn2[i];q[rear++][3]=dn2[i]; } } an[0]=b;bn[0]=a;cn[0]=c;dn[0]=d; an[1]=a;bn[1]=c;cn[1]=b;dn[1]=d; an[2]=a;bn[2]=b;cn[2]=d;dn[2]=c; for(i=0;i<3;i++) { if(dis[an[i]][bn[i]][cn[i]][dn[i]]>dis[a][b][c][d]+1) { dis[an[i]][bn[i]][cn[i]][dn[i]]=dis[a][b][c][d]+1; q[rear][0]=an[i];q[rear][1]=bn[i];q[rear][2]=cn[i];q[rear++][3]=dn[i]; } } } printf("%d\n",dis[key[0]][key[1]][key[2]][key[3]]); }}/*input:21234214411119999output:24*/

转载于:https://www.cnblogs.com/acmjun/archive/2012/07/25/2608591.html

你可能感兴趣的文章
css选择器中:first-child与:first-of-type的区别
查看>>
高效、易用、功能强大的 api 管理平台
查看>>
windows启动/禁用telnet/IIS/ftp/IE等服务
查看>>
Java——抽象类
查看>>
20155310 2016-2017-2 《Java程序设计》第2周学习总结
查看>>
G面经prepare: Data Stream Average
查看>>
oc85--利用宏定义简化单例
查看>>
requestFocusFromTouch , requestFocus
查看>>
show hide()函数 参数具体对应的毫秒数
查看>>
Python3.X爬虫
查看>>
html取消回车刷新提交
查看>>
bootstrap使用笔记
查看>>
全网最详系列之-倍增求LCA
查看>>
周末总结
查看>>
课本议题
查看>>
Javascript中的应用和呼叫继承
查看>>
微软企业库4.1学习笔记(二十一)加解密模块1 简介
查看>>
updater-script语法说明
查看>>
Oracle数据库创建表是有两个约束带有默认索引
查看>>
团队作业8——第二次项目冲刺(Beta阶段)(冲刺计划)
查看>>