/*
题意:就是给定两个筛子,每个筛子上6个面,每个面的数字属于[1,6], 且互不相同!
问a筛子最少经过按照题目规定的要求转动,达到和b筛子上下左右前后的数字相同! 思路:很直白的bfs,将每一种状态对应一个数字,保证这种状态不会重新加入队列中!
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std; int a[], ss;
int vis[]; struct node{
int k[];
node(){}
node(int a1, int a2, int a3, int a4, int a5, int a6){
k[]=a1;
k[]=a2;
k[]=a3;
k[]=a4;
k[]=a5;
k[]=a6;
}
int step;
}; queue<node>q; int sum(node x){
int s=;
for(int i=; i<=; ++i)
s= s* + x.k[i];
return s;
} bool bfs(){
while(!q.empty()) q.pop();
node cur(a[], a[], a[], a[], a[], a[]);
cur.step=;
q.push(cur);
vis[sum(cur)]=;
while(!q.empty()){
cur = q.front();
if(sum(cur)==ss){
printf("%d\n", cur.step);
return true;
}
q.pop();
node *nt = new node(cur.k[], cur.k[], cur.k[], cur.k[], cur.k[], cur.k[]);
int v = sum(*nt);
if(!vis[v]){
vis[v]=;
nt->step = cur.step + ;
q.push(*nt);
} nt = new node(cur.k[], cur.k[], cur.k[], cur.k[], cur.k[], cur.k[]);
v = sum(*nt);
if(!vis[v]){
vis[v]=;
nt->step = cur.step + ;
q.push(*nt);
} nt = new node(cur.k[], cur.k[], cur.k[], cur.k[], cur.k[], cur.k[]);
v = sum(*nt);
if(!vis[v]){
vis[v]=;
nt->step = cur.step + ;
q.push(*nt);
} nt = new node(cur.k[], cur.k[], cur.k[], cur.k[], cur.k[], cur.k[]);
v = sum(*nt);
if(!vis[v]){
vis[v]=;
nt->step = cur.step + ;
q.push(*nt);
}
}
return false;
} int main(){
while(scanf("%d%d%d%d%d%d", &a[], &a[], &a[], &a[], &a[], &a[])!=EOF){
ss=;
for(int i=; i<=; ++i){
int x;
scanf("%d", &x);
ss = ss * + x;
}
memset(vis, , sizeof(vis));
if(!bfs())
printf("-1\n");
}
return ;
}

2014 网选 5012 Dice(bfs模板)的更多相关文章

  1. 2014 网选 广州赛区 hdu 5025 Saving Tang Monk(bfs+四维数组记录状态)

    /* 这是我做过的一道新类型的搜索题!从来没想过用四维数组记录状态! 以前做过的都是用二维的!自己的四维还是太狭隘了..... 题意:悟空救师傅 ! 在救师父之前要先把所有的钥匙找到! 每种钥匙有 k ...

  2. 2014 网选 上海赛区 hdu 5047 Sawtooth

    题意:求n个'M'型的折线将一个平面分成的最多的面数! 思路:我们都知道n条直线将一个平面分成的最多平面数是 An = An-1 + n+1 也就是f(n) = (n*n + n +2)/2 对于一个 ...

  3. 2014 网选 5024 Wang Xifeng's Little Plot

    题意:从任意一个任意一个可走的点开始找一个最长的路,这条路如果有转弯的话, 那么必须是 90度,或者没有转弯! 思路: 首先用dfs将所有可走点开始的 8 个方向上的线段的最长长度求出来 ! step ...

  4. 2014 网选 广州赛区 hdu 5023 A Corrupt Mayor's Performance Art

    #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #d ...

  5. 2014 网选 5011 Game(Nim游戏,数学题)

    /* 题意:Nim游戏! 思路:通过异或,判断将n个数表示成二进制的形式之后,是否对应位的数字1 的个数是偶数! */ #include<iostream> using namespace ...

  6. 2014 网选 5007 Post Robot(暴力或者AC_自动机(有点小题大作了))

    //暴力,从每一行的开始处开始寻找要查询的字符 #include<iostream> #include<cstdio> #include<cstring> #inc ...

  7. 2014 网选 5014 Number Sequence(异或)

    /* 题意:a, b两个序列,规定由[0, n]区间的数! 求 a[i] ^ b[i] 的和最大! 思路:如果数字 n的二进制有x位, 那么一定存在一个数字m,使得n^m的所有二进制位 都是1,也就是 ...

  8. HDU5012:Dice(bfs模板)

    http://acm.hdu.edu.cn/showproblem.php?pid=5012 Problem Description There are 2 special dices on the ...

  9. BFS (1)算法模板 看是否需要分层 (2)拓扑排序——检测编译时的循环依赖 制定有依赖关系的任务的执行顺序 djkstra无非是将bfs模板中的deque修改为heapq

    BFS模板,记住这5个: (1)针对树的BFS 1.1 无需分层遍历 from collections import deque def levelOrderTree(root): if not ro ...

随机推荐

  1. C#/ASP.NET Xml多级数据读取

    <Data> <Project> <Item Id="51351132-59a7-4c0b-909d-51b89b1c3159" IsDefault= ...

  2. GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例

    转:http://www.tuicool.com/articles/NVVnMn (1)GCD实现的同步异步.串行并行. ——同步sync应用场景:用户登录,利用阻塞 ——串行异步应用场景:下载等耗时 ...

  3. Unreal Engine 4官网教程

    编辑器纵览 https://www.unrealengine.com/zh-CN/blog/editor-overview 虚幻编辑器UI布局概述 https://www.unrealengine.c ...

  4. SqlServer2008R2用Windows身份登录18456错误解决

    // 重装系统后发现SqlServer2008R2使用Windows身份验证不能进行连接,如下图: 以前经常会碰到SqlServer 身份验证连接失败,Windows身份验证的连接失败还是第一次,试了 ...

  5. samba权限之easy举例说明--原创

    实验环境RHEL5.0,samba3.023rc-2 一.何为browsealbe=no? 如图lingdao目录的权限为777 如图ling目录的共享设置和用户的ID和组 当用户lingdao_01 ...

  6. [C] tcharall(让所有平台支持TCHAR)v1.1。源码托管到github、添加CMake编译配置文件、使用doxygen规范注释

    作者:zyl910 v1.1版的改动如下—— 将源码上传到github. 调整目录结构. 添加CMake编译配置文件. 使用doxygen规范注释. 文件清单—— docs\ docs\images\ ...

  7. Activemq消息类型

    Activemq消息类型JMS规范中的消息类型包括TextMessage.MapMessage.ObjectMessage.BytesMessage.和StreamMessage等五种.ActiveM ...

  8. EntityFramework 5.0 CodeFirst 教程04-查询,插入,更新,和删除数据

    ---------------------目录-------------------------- EntityFramework 5.0 CodeFirst 教程04-查询,插入,更新,和删除数据  ...

  9. js获取gridview模板列中textbox行列的值

    下面一个例子:在gridview中第一列输入数值,第二列输入数值,点击第三列的时候进行计算 求和,如果不符合标记为红色字体. 如图: 代码 : <html xmlns="http:// ...

  10. embarcadero radstudio xe5 正式版 下载地址

    http://altd.embarcadero.com/download/radstudio/xe5/delphicbuilder_xe5_win.iso