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
原创粉丝点击