hdu 5012 Dice 2014 ACM/ICPC Asia Regional Xi'an Online bfs
来源:互联网 发布:php 反射获取类变量 编辑:程序博客网 时间:2024/05/01 12:26
题目链接:hdu 5012
给定一个正方体的六个面,问能否通过旋转得到目标状态的正方体。若能则输出最小旋转步数
处理出各个方向旋转的函数,每个状态可以用哈希值对应,然后bfs求最短步数即可
/****************************************************** * File Name: 1006.cpp * Author: kojimai * Creater Time:2014年09月14日 星期日 13时54分59秒******************************************************/#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<iostream>#include<queue>using namespace std;struct node {int n[6];int val;int t;}a,b;bool vis[1000000];queue<node> p;node left(node x){node ret;ret.n[4]=x.n[4];ret.n[5]=x.n[5];ret.n[0]=x.n[3];ret.n[1]=x.n[2];ret.n[2]=x.n[0];ret.n[3]=x.n[1];return ret;}node right(node x){node ret;ret.n[4]=x.n[4];ret.n[5]=x.n[5];ret.n[0]=x.n[2];ret.n[1]=x.n[3];ret.n[2]=x.n[1];ret.n[3]=x.n[0];return ret;}node fro(node x){node ret;ret.n[2]=x.n[2];ret.n[3]=x.n[3];ret.n[0]=x.n[5];ret.n[1]=x.n[4];ret.n[4]=x.n[0];ret.n[5]=x.n[1];return ret;}node bac(node x){node ret; ret.n[2]=x.n[2];ret.n[3]=x.n[3];ret.n[0]=x.n[4];ret.n[1]=x.n[5];ret.n[4]=x.n[1];ret.n[5]=x.n[0];return ret;}int getval(node x){int tmp=0;for(int i=0;i<6;i++){tmp=tmp*10+x.n[i];}return tmp;}int main(){while(~scanf("%d%d%d%d%d%d",&a.n[0],&a.n[1],&a.n[2],&a.n[3],&a.n[4],&a.n[5])){memset(vis,false,sizeof(vis));scanf("%d%d%d%d%d%d",&b.n[0],&b.n[1],&b.n[2],&b.n[3],&b.n[4],&b.n[5]);int tar=getval(b);int ans=-1;while(!p.empty())p.pop();a.t=0;a.val=getval(a);vis[a.val]=true;p.push(a);while(!p.empty()){node now=p.front();p.pop();if(now.val==tar){ans=now.t;break;}node ret;ret = left(now);ret.val = getval(ret);if(!vis[ret.val]){vis[ret.val]=true;ret.t = now.t + 1;p.push(ret);}ret = right(now);ret.val = getval(ret);if(!vis[ret.val]){vis[ret.val]=true;ret.t = now.t + 1;p.push(ret);}ret = fro(now);ret.val = getval(ret);if(!vis[ret.val]){vis[ret.val]=true;ret.t = now.t + 1;p.push(ret);}ret = bac(now);ret.val = getval(ret);if(!vis[ret.val]){vis[ret.val]=true;ret.t=now.t+1;p.push(ret);}}cout<<ans<<endl;}return 0;}
0 0
- hdu 5012 Dice 2014 ACM/ICPC Asia Regional Xi'an Online bfs
- hdu 5012 Dice BFS 2014 ACM/ICPC Asia Regional Xi'an Online
- hdu 5012 Dice 2014 ACM/ICPC Asia Regional Xi'an Online
- HDU5014(异或) HDU 5012(BFS)(2014 ACM/ICPC Asia Regional Xi'an Online)题解
- 2014 ACM/ICPC Asia Regional Xi'an Online 小记
- 2014 ACM/ICPC Asia Regional Xi'an Online
- 2014 ACM/ICPC Asia Regional Xi'an Online(hdu 5007 - hdu 5017)
- hdu 5015 233 Matrix 2014 ACM/ICPC Asia Regional Xi'an Online 矩阵快速幂
- hdu 5014 Number Sequence 2014 ACM/ICPC Asia Regional Xi'an Online 数论
- HDU 5014 Number Sequence 贪心 2014 ACM/ICPC Asia Regional Xi'an Online
- hdu 1009 233 Matrix 矩阵构造 --2014 ACM/ICPC Asia Regional Xi'an Online
- HDU 5015 233 Matrix / 2014 ACM/ICPC Asia Regional Xi'an Online
- hdu 5014 Number Sequence 找规律 | 贪心 2014 ACM/ICPC Asia Regional Xi'an Online
- hdu 5008(2014 ACM/ICPC Asia Regional Xi'an Online ) Boring String Problem(后缀数组&二分)
- hdu 5011 Game Nim博弈 2014 ACM/ICPC Asia Regional Xi'an Online
- hdu 5007 Post Robot 水题 2014 ACM/ICPC Asia Regional Xi'an Online
- 2014 ACM/ICPC Asia Regional Xi'an Online 233 Matrix,hdu 5015
- hdu 5009 Paint Pearls 2014 ACM/ICPC Asia Regional Xi'an Online
- OO and Procedural
- HDU 5007 Post Robot(字符串寻找)
- HDU 1089 A+B for Input-Output Practice (I)
- SVN服务器客户端搭建版本控制
- 连连看
- hdu 5012 Dice 2014 ACM/ICPC Asia Regional Xi'an Online bfs
- MCMC(Markov Chain Monte Carlo) and Gibbs Sampling
- 并发工具类(三)控制并发线程数的Semaphore
- hdu 5007 Post Robot 水题
- 移动硬盘格式化成FAT32分区方法
- 集线器(HUB),交换机,和路由器的区别
- static有什么作用?
- 为什么中国人说英语有时候听起来没有礼貌?
- 以 脚本精灵 为例,简单说说怎么制作apk共存包