/*
题意:就是给定两个筛子,每个筛子上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. TL-WR702N 连接有线路由

    2015-12-23日 备忘录: 1. TL-WR702N一定要设置为 route模式,一定选择“动态ip”,而不是“PPPOE” 2.有线路由器 与  TL-WR702N 的IP不能在一个网段: 目 ...

  2. Multiplexing SDIO Devices Using MAX II or CoolRunner-II CPLD

    XAPP906 Supporting Multiple SD Devices with CoolRunner-II CPLDs There has been an increasing demand ...

  3. 从WEB SERVICE 上返回大数据量的DATASET

    前段时间在做一个项目的时候,遇到了要通过WEB SERVICE从服务器上返回数据量比较大的DATASET,当然,除了显示在页面上以外,有可能还要用这些数据在客户端进行其它操作.查遍了网站的文章,问了一 ...

  4. [leetcode]Find Minimum in Rotated Sorted Array II @ Python

    原题地址:https://oj.leetcode.com/problems/find-minimum-in-rotated-sorted-array-ii/ 解题思路:这道题和上一道题的区别是,数组中 ...

  5. jsp:forward response.sendRedirect

    jsp中<jsp:forward page=""/>和response.sendRedirect("")两种跳转的区别 一.response.sen ...

  6. [LeetCode] Range Sum Query - Immutable & Range Sum Query 2D - Immutable

    Range Sum Query - Immutable Given an integer array nums, find the sum of the elements between indice ...

  7. 一篇文章,读懂 Netty 的高性能架构之道

    原文 Netty是一个高性能.异步事件驱动的NIO框架,它提供了对TCP.UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机 ...

  8. Source Insight 使用

    1.括号配对高亮:“在前括号左侧,后括号左侧” 双击鼠标左键,可以选定匹配括号和其中内容(<>,(),L{R},[]之间) 2.让{ 和 } 不缩进:Options -> Docum ...

  9. MVC4研发中遇到问题【持续总结....】

    第一: 编译器错误消息: CS0012: 类型“System.Data.Objects.DataClasses.EntityObject”在未被引用的程序集中定义.必须添加对程序集 “System.D ...

  10. PowerShell读取Windows产品密钥

    之前大多数人可能用过VBS读取Windows产品密钥的VBS脚本,VBS脚本通常都比较隐晦.难懂,今天忙里偷闲,随手写了一个用于读取Windows产品密钥的PowerShell脚本. 代码如下: == ...