标签:
题意:两个骰子,要把第一个骰子转到和第二个一样,有4种转法,求最少的次数
直接bfs,不过我用G++提交超时,用C++提交可以过,可能是使用了queue的原因。。。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<stdlib.h> 6 #include<algorithm> 7 #include<queue> 8 #include<map> 9 using namespace std; 10 struct Node 11 { 12 int a[7]; 13 int t; 14 }st,ed; 15 int vis[10][10][10][10][10][10]; 16 void bfs() 17 { 18 19 queue<Node>q; 20 q.push(st); 21 22 vis[st.a[0]][st.a[1]][st.a[2]][st.a[3]][st.a[4]][st.a[5]]=1; 23 Node t1,t2; 24 Node tmp; 25 while(!q.empty()) 26 { 27 t1=q.front(); 28 q.pop(); 29 if(t1.a[0]==ed.a[0] && t1.a[1]==ed.a[1]&& t1.a[2]==ed.a[2]&& t1.a[3]==ed.a[3]&& t1.a[4]==ed.a[4] && t1.a[5]==ed.a[5]) 30 { 31 printf("%d\n",t1.t); 32 return; 33 } 34 35 t2=t1; 36 t2.a[0]=t1.a[3]; 37 t2.a[1]=t1.a[2]; 38 t2.a[2]=t1.a[0]; 39 t2.a[3]=t1.a[1]; 40 if(vis[t2.a[0]][t2.a[1]][t2.a[2]][t2.a[3]][t2.a[4]][t2.a[5]]==0) 41 { 42 vis[t2.a[0]][t2.a[1]][t2.a[2]][t2.a[3]][t2.a[4]][t2.a[5]]=1; 43 t2.t=t1.t+1; 44 q.push(t2); 45 } 46 47 48 t2=t1; 49 t2.a[0]=t1.a[2]; 50 t2.a[1]=t1.a[3]; 51 t2.a[2]=t1.a[1]; 52 t2.a[3]=t1.a[0]; 53 if(vis[t2.a[0]][t2.a[1]][t2.a[2]][t2.a[3]][t2.a[4]][t2.a[5]]==0) 54 { 55 vis[t2.a[0]][t2.a[1]][t2.a[2]][t2.a[3]][t2.a[4]][t2.a[5]]=1; 56 t2.t=t1.t+1; 57 q.push(t2); 58 } 59 60 t2=t1; 61 t2.a[0]=t1.a[5]; 62 t2.a[1]=t1.a[4]; 63 t2.a[4]=t1.a[0]; 64 t2.a[5]=t1.a[1]; 65 if(vis[t2.a[0]][t2.a[1]][t2.a[2]][t2.a[3]][t2.a[4]][t2.a[5]]==0) 66 { 67 vis[t2.a[0]][t2.a[1]][t2.a[2]][t2.a[3]][t2.a[4]][t2.a[5]]=1; 68 t2.t=t1.t+1; 69 q.push(t2); 70 } 71 72 t2=t1; 73 t2.a[0]=t1.a[4]; 74 t2.a[1]=t1.a[5]; 75 t2.a[4]=t1.a[1]; 76 t2.a[5]=t1.a[0]; 77 if(vis[t2.a[0]][t2.a[1]][t2.a[2]][t2.a[3]][t2.a[4]][t2.a[5]]==0) 78 { 79 vis[t2.a[0]][t2.a[1]][t2.a[2]][t2.a[3]][t2.a[4]][t2.a[5]]=1; 80 t2.t=t1.t+1; 81 q.push(t2); 82 } 83 } 84 printf("-1\n"); 85 } 86 int main() 87 { 88 while(scanf("%d%d%d%d%d%d",&st.a[0],&st.a[1],&st.a[2],&st.a[3],&st.a[4],&st.a[5])==6) 89 { 90 scanf("%d%d%d%d%d%d",&ed.a[0],&ed.a[1],&ed.a[2],&ed.a[3],&ed.a[4],&ed.a[5]); 91 st.t=0; 92 memset(vis,0,sizeof(vis)); 93 bfs(); 94 } 95 return 0; 96 }
标签:
原文地址:http://www.cnblogs.com/UniqueColor/p/4743976.html