Problem Description
There are 2 special dices on the table. On each face of the dice, a distinct number was written. Consider a1.a2,a3,a4,a5,a6 to be numbers written on top face, bottom face, left face, right face, front face and back face of dice A. Similarly, consider b1.b2,b3,b4,b5,b6 to be numbers on specific faces of dice B. It’s guaranteed that all numbers written on dices are integers no smaller than 1 and no more than 6 while ai ≠ aj and bi ≠ bj for all i ≠ j. Specially, sum of numbers on opposite faces may not be 7.
At the beginning, the two dices may face different(which means there exist some i, ai ≠ bi). Ddy wants to make the two dices look the same from all directions(which means for all i, ai = bi) only by the following four rotation operations.(Please read the picture for more information)Now Ddy wants to calculate the minimal steps that he has to take to achieve his goal.
 
Input
There are multiple test cases. Please process till EOF. 
For each case, the first line consists of six integers a1,a2,a3,a4,a5,a6, representing the numbers on dice A. 
The second line consists of six integers b1,b2,b3,b4,b5,b6, representing the numbers on dice B.
 
Output
For each test case, print a line with a number representing the answer. If there’s no way to make two dices exactly the same, output -1.
 
Sample Input
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 5 6 4 3
1 2 3 4 5 6
1 4 2 5 3 6
 
Sample Output
0
3
-1
 
Source
 

题意:两个骰子,要把第一个骰子转到和第二个一样,有4种转法,求最少的次数

直接bfs,不过我用G++提交超时,用C++提交可以过,可能是使用了queue的原因。。。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<stdlib.h>
#include<algorithm>
#include<queue>
#include<map>
using namespace std;
struct Node
{
int a[];
int t;
}st,ed;
int vis[][][][][][];
void bfs()
{ queue<Node>q;
q.push(st); vis[st.a[]][st.a[]][st.a[]][st.a[]][st.a[]][st.a[]]=;
Node t1,t2;
Node tmp;
while(!q.empty())
{
t1=q.front();
q.pop();
if(t1.a[]==ed.a[] && t1.a[]==ed.a[]&& t1.a[]==ed.a[]&& t1.a[]==ed.a[]&& t1.a[]==ed.a[] && t1.a[]==ed.a[])
{
printf("%d\n",t1.t);
return;
} t2=t1;
t2.a[]=t1.a[];
t2.a[]=t1.a[];
t2.a[]=t1.a[];
t2.a[]=t1.a[];
if(vis[t2.a[]][t2.a[]][t2.a[]][t2.a[]][t2.a[]][t2.a[]]==)
{
vis[t2.a[]][t2.a[]][t2.a[]][t2.a[]][t2.a[]][t2.a[]]=;
t2.t=t1.t+;
q.push(t2);
} t2=t1;
t2.a[]=t1.a[];
t2.a[]=t1.a[];
t2.a[]=t1.a[];
t2.a[]=t1.a[];
if(vis[t2.a[]][t2.a[]][t2.a[]][t2.a[]][t2.a[]][t2.a[]]==)
{
vis[t2.a[]][t2.a[]][t2.a[]][t2.a[]][t2.a[]][t2.a[]]=;
t2.t=t1.t+;
q.push(t2);
} t2=t1;
t2.a[]=t1.a[];
t2.a[]=t1.a[];
t2.a[]=t1.a[];
t2.a[]=t1.a[];
if(vis[t2.a[]][t2.a[]][t2.a[]][t2.a[]][t2.a[]][t2.a[]]==)
{
vis[t2.a[]][t2.a[]][t2.a[]][t2.a[]][t2.a[]][t2.a[]]=;
t2.t=t1.t+;
q.push(t2);
} t2=t1;
t2.a[]=t1.a[];
t2.a[]=t1.a[];
t2.a[]=t1.a[];
t2.a[]=t1.a[];
if(vis[t2.a[]][t2.a[]][t2.a[]][t2.a[]][t2.a[]][t2.a[]]==)
{
vis[t2.a[]][t2.a[]][t2.a[]][t2.a[]][t2.a[]][t2.a[]]=;
t2.t=t1.t+;
q.push(t2);
}
}
printf("-1\n");
}
int main()
{
while(scanf("%d%d%d%d%d%d",&st.a[],&st.a[],&st.a[],&st.a[],&st.a[],&st.a[])==)
{
scanf("%d%d%d%d%d%d",&ed.a[],&ed.a[],&ed.a[],&ed.a[],&ed.a[],&ed.a[]);
st.t=;
memset(vis,,sizeof(vis));
bfs();
}
return ;
}

hdu 5012 Dice的更多相关文章

  1. HDU 5012 Dice (BFS)

    事实上是非常水的一道bfs,用字符串表示每一个状态,map判重就ok了. 题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=5012 #include&l ...

  2. ACM学习历程—HDU 5012 Dice(ACM西安网赛)(bfs)

    Problem Description There are 2 special dices on the table. On each face of the dice, a distinct num ...

  3. HDU 5012 Dice DFS

    简单DFS //#pragma comment(linker, "/STACK:16777216") //for c++ Compiler #include <stdio.h ...

  4. Spring-1-F Dice(HDU 5012)解题报告及测试数据

    Dice Time Limit:1000MS     Memory Limit:65536KB Description There are 2 special dices on the table. ...

  5. HDU 5012 骰子旋转(DFS)

    http://acm.hdu.edu.cn/showproblem.php?pid=5012 保存骰子的状态,然后用dfs或者bfs搜索 还是再讲一下dfs 我们的目标是找一个与b相同,且转次数最少的 ...

  6. hdu 5012 模拟+bfs

    http://acm.hdu.edu.cn/showproblem.php?pid=5012 模拟出骰子四种反转方式,bfs,最多不会走超过6步 #include <cstdio> #in ...

  7. hdu 5012 bfs --- 慎用STL 比方MAP判重

    http://acm.hdu.edu.cn/showproblem.php?pid=5012 发现一个问题 假设Sting s = '1'+'2'+'3'; s!="123"!!! ...

  8. HDU 4652 Dice(期望)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4652 题意:一个m个面的筛子.两种询问:(1)平均抛多少次后使得最后n次的面完全一样:(2)平均抛多少 ...

  9. HDU 4652 Dice:期望dp(成环)【错位相减】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4652 题意: 给你一个有m个面的骰子. 两种询问: (1)"0 m n": “最后 ...

随机推荐

  1. 有利于SEO的DIV+CSS规范小结

    一.CSS文件及样式命名 1.CSS文件命名规范 全局样式:global.css:框架布局:layout.css:字体样式:font.css:链接样式:link.css:打印样式:print.css: ...

  2. [置顶] Android系统访问控制之Smack安全策略设计与实现

    1. 制定smack规则 “Zygote”进程由init进程创建,它负责创建系统服务进程“systemserver”.“radio”进程和APP进程.其中“radio”进程的uid是1001,它能够实 ...

  3. [ACM] POJ 1442 Black Box (堆,优先队列)

    Black Box Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7099   Accepted: 2888 Descrip ...

  4. Neral的前言

    大家好,我是Neral,我准备写一个js库. 在动笔之前,我一直都处在很忐忑的状态,因为我写代码讲究的是一种感觉,那是看到自己写的代码之后大脑中就出现之后的无数个编码分支的快感,但是,如果很长一段时间 ...

  5. .NET Core初体验 - 在Mac下运行第一个Web示例程序

    要说最近两天程序猿之间最喜欢吹水的事是什么?那绝壁是甲骨文要放弃Java!简直做梦都要笑醒!由于公司的产品线全面转向Java,最近几个月也一直在苦学Java技术.已经默默决定了,如果消息证实是真的,我 ...

  6. (转)asp.net实现忘记密码找回的代码

    1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or ...

  7. 触发器内insert,delete,update判断执行不同的内容

    create trigger tr_aon afor insert,update,delere asbegin IF EXISTS(SELECT 1 FROM inserted) AND NOT EX ...

  8. Linux中yum手动安装、手动建立仓库文件夹关联实现关联包自动安装、yum相关命令使用

               yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指 ...

  9. jquery的鼠标移入移出事件hover、mouseenter、mouseleave、mouseover、mouseout

    hover:鼠标进入元素的子元素时不会触发‘鼠标移开’的事件: mouseenter.mouseleave:效果与hover相同: mouseover: 鼠标进入元素和进入它的子元素时都会触发‘mou ...

  10. Android网络框架比较

    今天,公司需要为一个安卓app选择一个合适的网络框架,具体我了解,主要的安卓网络框架有okhttp,retrofit,android-async-http,volley. 查找网上的资料,大致可以得到 ...