大致题意
给出两个色子,问第一个色子翻转多少次之后能变成第二个色子
大致思路:
暴力bfs就能过
#include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; class nod{ public : int face[6]; int res; }aa1,aa2; int vis[7][7][7][7][7][7],ans,num[6]; void turn1(nod& node){ int i; int mark[6]; for(i=0;i<6;i++){ mark[i]=node.face[i]; } node.face[0]=mark[3]; node.face[1]=mark[2]; node.face[2]=mark[0]; node.face[3]=mark[1]; node.face[4]=mark[4]; node.face[5]=mark[5]; } void turn2(nod& node){ int i; int mark[6]; for(i=0;i<6;i++){ mark[i]=node.face[i]; } node.face[0]=mark[2]; node.face[1]=mark[3]; node.face[2]=mark[1]; node.face[3]=mark[0]; node.face[4]=mark[4]; node.face[5]=mark[5]; } void turn3(nod& node){ int i; int mark[6]; for(i=0;i<6;i++){ mark[i]=node.face[i]; } node.face[0]=mark[5]; node.face[1]=mark[4]; node.face[2]=mark[2]; node.face[3]=mark[3]; node.face[4]=mark[0]; node.face[5]=mark[1]; } void turn4(nod& node){ int i; int mark[6]; for(i=0;i<6;i++){ mark[i]=node.face[i]; } node.face[0]=mark[4]; node.face[1]=mark[5]; node.face[2]=mark[2]; node.face[3]=mark[3]; node.face[4]=mark[1]; node.face[5]=mark[0]; } bool bfs(){ int i; queue<nod>que; que.push(aa1); while(!que.empty()){ nod node; node=que.front(); que.pop(); if(node.face[0]==aa2.face[0]&&node.face[1]==aa2.face[1]&&node.face[2]==aa2.face[2]&&node.face[3]==aa2.face[3]&&node.face[4]==aa2.face[4]&&node.face[5]==aa2.face[5]) { ans=node.res; return 1; } node.res++; for(i=0;i<6;i++){ num[i]=node.face[i]; } turn1(node); // cout<<"node1"<<node.face[0]<<" "<<node.face[1]<<" "<<node.face[2]<<" "<<node.face[3]<<" "<<node.face[4]<<" "<<node.face[5]<<endl; if(!vis[node.face[0]][node.face[1]][node.face[2]][node.face[3]][node.face[4]][node.face[5]]){ vis[node.face[0]][node.face[1]][node.face[2]][node.face[3]][node.face[4]][node.face[5]]=1; que.push(node); } for(i=0;i<6;i++){ node.face[i]=num[i]; } turn2(node); // cout<<"node2"<<node.face[0]<<" "<<node.face[1]<<" "<<node.face[2]<<" "<<node.face[3]<<" "<<node.face[4]<<" "<<node.face[5]<<endl; if(!vis[node.face[0]][node.face[1]][node.face[2]][node.face[3]][node.face[4]][node.face[5]]){ vis[node.face[0]][node.face[1]][node.face[2]][node.face[3]][node.face[4]][node.face[5]]=1; que.push(node); } for(i=0;i<6;i++){ node.face[i]=num[i]; } turn3(node); // cout<<"node3"<<node.face[0]<<" "<<node.face[1]<<" "<<node.face[2]<<" "<<node.face[3]<<" "<<node.face[4]<<" "<<node.face[5]<<endl; if(!vis[node.face[0]][node.face[1]][node.face[2]][node.face[3]][node.face[4]][node.face[5]]){ vis[node.face[0]][node.face[1]][node.face[2]][node.face[3]][node.face[4]][node.face[5]]=1; que.push(node); } for(i=0;i<6;i++){ node.face[i]=num[i]; } turn4(node); // cout<<"node4"<<node.face[0]<<" "<<node.face[1]<<" "<<node.face[2]<<" "<<node.face[3]<<" "<<node.face[4]<<" "<<node.face[5]<<endl; if(!vis[node.face[0]][node.face[1]][node.face[2]][node.face[3]][node.face[4]][node.face[5]]){ vis[node.face[0]][node.face[1]][node.face[2]][node.face[3]][node.face[4]][node.face[5]]=1; que.push(node); } } return 0; } int main(){ int i; while(cin>>aa1.face[0]){ ans=0; for(i=1;i<6;i++)cin>>aa1.face[i]; for(i=0;i<6;i++)cin>>aa2.face[i]; memset(vis,0,sizeof(vis)); aa1.res=0; vis[aa1.face[0]][aa1.face[1]][aa1.face[2]][aa1.face[3]][aa1.face[4]][aa1.face[5]]=1; if(bfs())cout<<ans<<endl; else cout<<-1<<endl; } return 0; }
相关推荐
代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 ...
降群法解魔方 哈哈师大 使用双向BFS搜素
动态内存+BFS #include #include #include #include using namespace std; void BFS(list<int> *the_a,int the_N,int the_S,int *the_b){ int *m=new int[the_N]; for(int k1=0;k1;k1++) m[k1]=0; m[the_S-1]=1; ...
simulink BFSK仿真
详细地介绍BFS的思路模式以及用几个案例教授怎么运用BFS去解题。
bfsk系统仿真 bfsk系统仿真 bfsk系统仿真
这是山东大学可视化课程项目,用js实现的BFS和DFS,详细的展示了BFS和DFS的运行过程,网页可交互。
现有的分布式文件系统(如HDFS等)无法满足低延迟、高可用、跨地域扩展等方面的需求,所以我们从百度搜索的业务特点出发,开发了自己的分布式文件系统BFS。 设计目标 高可靠、高可用通过将数据副本进行多机房、多...
code for bfs algorithm
DFS和BFS算法的实现,使用C++语言,适合数据结构初学者学习。
压缩文件里的“bfs-node.h”是头文件,需要在Visual Studio中附加在头文件。这里采取了有向图的邻接链表表现形式,起作用的bfs函数的代码格式参考了《算法导论》这本书上的伪代码。
BFS广度优先搜索算法视频演示。宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索...
cuda code of bfs algorithm
Matlab仿真BPSK,BFSK,BASK,BDPSK相干解调以及非相干解调的误码率。
采用共轭方向法中的BFS方法进行优化,程序中采用简单算例,并附有文档说明
bfsk在高斯信道和锐利多径衰落信道中传输的性能比较,使用simulink!!!!!!!!!
C++ BFS迷宫.cpp
this is code for bfs in c++
二叉树遍历BFS与DFS详细代码python版
算法之BFS与DFS