HDU1195:Open the Lock(BFS)
来源:互联网 发布:上古卷轴5跳跃数据修改 编辑:程序博客网 时间:2024/04/27 15:00
Problem Description
Now an emergent task for you is to open a password lock. The password is consisted of four digits. Each digit is numbered from 1 to 9.
Each time, you can add or minus 1 to any digit. When add 1 to '9', the digit will change to be '1' and when minus 1 to '1', the digit will change to be '9'. You can also exchange the digit with its neighbor. Each action will take one step.
Now your task is to use minimal steps to open the lock.
Note: The leftmost digit is not the neighbor of the rightmost digit.
Each time, you can add or minus 1 to any digit. When add 1 to '9', the digit will change to be '1' and when minus 1 to '1', the digit will change to be '9'. You can also exchange the digit with its neighbor. Each action will take one step.
Now your task is to use minimal steps to open the lock.
Note: The leftmost digit is not the neighbor of the rightmost digit.
Input
The input file begins with an integer T, indicating the number of test cases.
Each test case begins with a four digit N, indicating the initial state of the password lock. Then followed a line with anotther four dight M, indicating the password which can open the lock. There is one blank line after each test case.
Each test case begins with a four digit N, indicating the initial state of the password lock. Then followed a line with anotther four dight M, indicating the password which can open the lock. There is one blank line after each test case.
Output
For each test case, print the minimal steps in one line.
Sample Input
21234214411119999
Sample Output
24
题目不难,BFS,代码有点长,嘛,部分代码都是复制黏贴的事
关键是状态记录,开个四维数组记录当前密码就好了
#include<stdio.h>#include<queue>#include<string>using namespace std;int pw[5];int vis[11][11][11][11];struct node{int n[4],step;}ini;void bfs(){int i;queue<node>Q;node nex,a;ini.step=0;vis[ini.n[0]][ini.n[1]][ini.n[2]][ini.n[3]]=1;Q.push(ini);while(!Q.empty()){a=Q.front();Q.pop();if(a.n[0]==pw[0]&&a.n[1]==pw[1]&&a.n[2]==pw[2]&&a.n[3]==pw[3]){printf("%d\n",a.step);return ;}//+1for(i=0;i<4;i++){nex=a;nex.n[i]++;if(nex.n[i]>9)nex.n[i]=1;if(!vis[nex.n[0]][nex.n[1]][nex.n[2]][nex.n[3]]){vis[nex.n[0]][nex.n[1]][nex.n[2]][nex.n[3]]=1;nex.step++;Q.push(nex);}}//-1for(i=0;i<4;i++){nex=a;nex.n[i]--;if(nex.n[i]<1)nex.n[i]=9;if(!vis[nex.n[0]][nex.n[1]][nex.n[2]][nex.n[3]]){vis[nex.n[0]][nex.n[1]][nex.n[2]][nex.n[3]]=1;nex.step++;Q.push(nex);}}//exchangefor(i=0;i<3;i++){nex=a;nex.n[i]=a.n[i+1];nex.n[i+1]=a.n[i];if(!vis[nex.n[0]][nex.n[1]][nex.n[2]][nex.n[3]]){vis[nex.n[0]][nex.n[1]][nex.n[2]][nex.n[3]]=1;nex.step++;Q.push(nex);}}}printf("-1\n");}int main(){int t;char str1[5],str2[5];scanf("%d",&t);while(t--){scanf("%s%s",str1,str2);for(int i=0;i<4;++i){ini.n[i]=str1[i]-'0';pw[i]=str2[i]-'0';}memset(vis,0,sizeof(vis));bfs();}return 0;}
0 0
- hdu1195 Open the Lock(BFS)
- HDU1195:Open the Lock(BFS)
- HDU1195:Open the Lock(BFS)
- hdu1195 Open the Lock (BFS)
- hdu1195 Open the Lock BFS 广搜
- hdu1195-Open the Lock-双向&&单向bfs
- hdu1195 Open the Lock(bfs水题)
- hdu1195 Open the Lock (bfs)
- hdu1195 Open the Lock
- hdu1195 Open the Lock
- hdu1195 Open the Lock
- hdu1195 Open the Lock
- hdu1195-Open the Lock
- HDU1195 Open the Lock
- HDU1195 Open the Lock
- hdu1195 Open the Lock
- HDU1195---Open the Lock
- HDU1195-Open the Lock
- Target runtime Apache Tomcat 6.0 is not defined 解决方法
- python关键字is与 ==的区别
- Arduino 网络时钟客户端
- 纪念伟大的艺术家乔布斯
- 自动输入密码
- HDU1195:Open the Lock(BFS)
- leetcode之Flatten Binary Tree to Linked List
- iframe中子父窗口互调的js方法
- sjdfhsdfkl
- -lgcc_s cannot found 原因及解决办法
- 经典智力测试:过桥问题
- NYOJ 58 最少步数
- Spark SQL 源码分析之Physical Plan 到 RDD的具体实现
- (面试)模拟一个俱乐部里人数程序