/*
题意:就是给定两个筛子,每个筛子上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. 线程与并发系列一:Lock、Monitor、UserSpinLock

    using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ...

  2. typeid详解

    在揭开typeid神秘面纱之前,我们先来了解一下RTTI(Run-Time Type Identification,运行时类型识别),它使程序能够获取由基指针或引用所指向的对象的实际派生类型,即允许“ ...

  3. FTP客户端上传下载Demo实现

    1.第一次感觉MS也有这么难用的MFC类: 2.CFtpFileFind类只能实例化一个,多个实例同时查找会出错(因此下载时不能递归),采用队列存储目录再依次下载: 3.本程序支持文件夹嵌套上传下载: ...

  4. xml转换之

    1.XStream public static <T> T toBean(String xmlStr, Class<T> cls) { XStream xstream = ne ...

  5. Linux下GCC和Makefile实例(从GCC的编译到Makefile的引入) 转

    http://www.crazyant.net/2011/10/29/linux%E4%B8%8Bgcc%E5%92%8Cmakefile%E5%AE%9E%E4%BE%8B%EF%BC%88%E4% ...

  6. 单点登录 SSO(Single Sign-On)的实现原理

    为什么要 SSO? 企业的信息化过程是一个循序渐进的过程,这就造成在企业的不同时期,根据业务和发展需要,构建了多个应用程序,而这些应用程序在功能.设计和技术可能都有所不同,就形成了各自独立的用户库和用 ...

  7. Mac OSX - 如何在bash_profile中配置全局环境变量

    我们知道,在Linux操作系统下,配置环境变量是使用如下命令: vim /etc/profile 在OSX下,我们用如下命令打开环境变量配置文件: open ~/.bash_profile 典型的环境 ...

  8. Android学习笔记----Activity的生命周期图示

    转载,一目了然.

  9. R语言之词云:wordcloud&wordcloud2安装及参数说明

    一.wordcloud安装说明 install.packages("wordcloud"); 二.wordcloud2安装说明 install.packages("dev ...

  10. JVM -Xss调整Stack Space的大小 【转】

    Java程序中,每个线程都有自己的Stack Space.这个Stack Space不是来自Heap的分配.所以Stack Space的大小不会受到-Xmx和-Xms的影响,这2个JVM参数仅仅是影响 ...