hdu-1195--Open the Lock(BFS)
生活随笔
收集整理的這篇文章主要介紹了
hdu-1195--Open the Lock(BFS)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1195
#include<stdio.h> #include<iostream> #include<string.h> #include<queue> using namespace std; int vis[10][10][10][10]; int s[10],s1[10]; struct node {int a,b,c,d,step; }; void bfs() {node p,q;queue<node> Q;memset(vis,0,sizeof(vis));p.a=s[0];p.b=s[1];p.c=s[2];p.d=s[3];vis[p.a][p.b][p.c][p.d]=1;p.step=0;Q.push(p);while(!Q.empty()){q=Q.front();Q.pop();if(q.a==s1[0]&&q.b==s1[1]&&q.c==s1[2]&&q.d==s1[3]){printf("%d\n",p.step-1);return ;}for(int i=0;i<4;i++)//+1{if(i==0){if(q.a==9) p.a=1;else p.a=q.a+1;p.b=q.b;p.c=q.c;p.d=q.d;}else if(i==1){if(q.b==9) p.b=1;else p.b=q.b+1;p.a=q.a;p.c=q.c;p.d=q.d;}else if(i==2){if(q.c==9) p.c=1;else p.c=q.c+1;p.a=q.a;p.b=q.b;p.d=q.d;}else{if(q.d==9) p.d=1;else p.d=q.d+1;p.a=q.a;p.c=q.c;p.b=q.b;}if(!vis[p.a][p.b][p.c][p.d]){p.step=q.step+1;vis[p.a][p.b][p.c][p.d]=1;Q.push(p);}}for(int i=0;i<4;i++)//-1{if(i==0){if(q.a==1) p.a=9;else p.a=q.a-1;p.b=q.b;p.c=q.c;p.d=q.d;}else if(i==1){if(q.b==1) p.b=9;else p.b=q.b-1;p.a=q.a;p.c=q.c;p.d=q.d;}else if(i==2){if(q.c==1) p.c=9;else p.c=q.c-1;p.a=q.a;p.b=q.b;p.d=q.d;}else{if(q.d==1) p.d=9;else p.d=q.d-1;p.a=q.a;p.c=q.c;p.b=q.b;}if(!vis[p.a][p.b][p.c][p.d]){p.step=q.step+1;vis[p.a][p.b][p.c][p.d]=1;Q.push(p);}}for(int i=0;i<3;i++)//兩兩交換{if(i==0){p.a=q.b;p.b=q.a;p.c=q.c;p.d=q.d;}else if(i==1){p.a=q.a;p.b=q.c;p.c=q.b;p.d=q.d;}else{p.a=q.a;p.b=q.b;p.c=q.d;p.d=q.c;}if(!vis[p.a][p.b][p.c][p.d]){p.step=q.step+1;vis[p.a][p.b][p.c][p.d]=1;Q.push(p);}}}return ; } int main() {int n;char c,str[10],str1[11];cin>>n;while(n--){cin>>str;cin>>str1;for(int i=0;i<4;i++)s[i]=str[i]-'0';for(int i=0;i<4;i++)s1[i]=str1[i]-'0';scanf("%c",&c);bfs();} }總結
以上是生活随笔為你收集整理的hdu-1195--Open the Lock(BFS)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里技术|Java 的这些坑,你踩到了吗
- 下一篇: 阿里 P8 Java高级架构师,都需要掌