1 /*
  2     题意:就是给定两个筛子,每个筛子上6个面,每个面的数字属于[1,6], 且互不相同!
  3     问a筛子最少经过按照题目规定的要求转动,达到和b筛子上下左右前后的数字相同!
  4
  5     思路:很直白的bfs,将每一种状态对应一个数字,保证这种状态不会重新加入队列中!
  6 */
  7 #include<iostream>
  8 #include<cstdio>
  9 #include<cstring>
 10 #include<algorithm>
 11 #include<queue>
 12 using namespace std;
 13
 14 int a[7], ss;
 15 int vis[654330];
 16
 17 struct node{
 18     int k[7];
 19     node(){}
 20     node(int a1, int a2, int a3, int a4, int a5, int a6){
 21         k[1]=a1;
 22         k[2]=a2;
 23         k[3]=a3;
 24         k[4]=a4;
 25         k[5]=a5;
 26         k[6]=a6;
 27     }
 28     int step;
 29 };
 30
 31 queue<node>q;
 32
 33
 34 int sum(node x){
 35     int s=0;
 36     for(int i=1; i<=6; ++i)
 37        s= s*10 + x.k[i];
 38     return s;
 39 }
 40
 41 bool bfs(){
 42     while(!q.empty()) q.pop();
 43     node cur(a[1], a[2], a[3], a[4], a[5], a[6]);
 44     cur.step=0;
 45     q.push(cur);
 46     vis[sum(cur)]=1;
 47     while(!q.empty()){
 48         cur = q.front();
 49         if(sum(cur)==ss){
 50             printf("%d\n", cur.step);
 51             return true;
 52         }
 53         q.pop();
 54         node *nt = new node(cur.k[5], cur.k[6], cur.k[3], cur.k[4], cur.k[2], cur.k[1]);
 55         int v = sum(*nt);
 56         if(!vis[v]){
 57             vis[v]=1;
 58             nt->step = cur.step + 1;
 59             q.push(*nt);
 60         }
 61
 62         nt = new node(cur.k[6], cur.k[5], cur.k[3], cur.k[4], cur.k[1], cur.k[2]);
 63         v = sum(*nt);
 64         if(!vis[v]){
 65             vis[v]=1;
 66             nt->step = cur.step + 1;
 67             q.push(*nt);
 68         }
 69
 70         nt = new node(cur.k[3], cur.k[4], cur.k[2], cur.k[1], cur.k[5], cur.k[6]);
 71         v = sum(*nt);
 72         if(!vis[v]){
 73             vis[v]=1;
 74             nt->step = cur.step + 1;
 75             q.push(*nt);
 76         }
 77
 78         nt = new node(cur.k[4], cur.k[3], cur.k[1], cur.k[2], cur.k[5], cur.k[6]);
 79         v = sum(*nt);
 80         if(!vis[v]){
 81             vis[v]=1;
 82             nt->step = cur.step + 1;
 83             q.push(*nt);
 84         }
 85     }
 86     return false;
 87 }
 88
 89 int main(){
 90     while(scanf("%d%d%d%d%d%d", &a[1], &a[2], &a[3], &a[4], &a[5], &a[6])!=EOF){
 91         ss=0;
 92         for(int i=1; i<=6; ++i){
 93             int x;
 94             scanf("%d", &x);
 95             ss = ss * 10 + x;
 96         }
 97         memset(vis, 0, sizeof(vis));
 98         if(!bfs())
 99             printf("-1\n");
100     }
101     return 0;
102 }

转载于:https://www.cnblogs.com/hujunzheng/p/3975625.html

2014 网选 5012 Dice(bfs模板)相关推荐

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

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

  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

    1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<algorith ...

  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(异或)

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

  8. 《开源网店系统iWebShop2.0模板开发教程》的说明

    <开源网店系统iWebShop2.0模板开发教程>是网上广为流传的一个文档,有点问题. 其中的第4章: ========================================== ...

  9. 爬虫第二弹:千图网电商淘宝模板图片下载

    爬虫第二弹:千图网电商淘宝模板图片下载  一.功能分析: 1.下载千图网电商淘宝的所有模板图片要求是高清版本: 2.并按照主页面将图片归类文件夹.   二.思路分析: 1.利用scrapy构建scra ...

最新文章

  1. java 计算股票高低点_[转载]股市中常用的一些计算高低点的计算方法
  2. How to enable multiple text type for Product
  3. rssi定位算法 c语言,【论文※】An RSSI Gradient-based AP Localization Algorithm 基于RSSI梯度的AP定位算法...
  4. 《坐热板凳》第八次团队作业:Alpha冲刺(第二天)
  5. NHibernate+WCF项目实战(四)使用WAS对Webservices接口进行压力测试
  6. java list 效率_Java中5种List的去重方法及它们的效率对比,你用对了吗?
  7. PHP面向对象之领域模型+数据映射器
  8. 计算机网络在电力系统继电保护的应用毕业论文,毕业论文 110kV电力系统继电保护的配置...
  9. 系统架构师论文-论新技术的引进
  10. 靠!我被项目经理和同事嘲笑了,因为不会远程debug调试...
  11. Anaconda, Spyder更新导致Spyder环境奔溃
  12. 51Talk-Level 7 Unit 2 L3
  13. 订餐系统实验报告java_订餐系统的java实训报告.ppt
  14. R语言可视化——画脸谱图
  15. Nginx源码分析之ngx_hash_t
  16. 常见字读音(粤语)---(2)
  17. did you register the component correctly? For recursive components, make sure to provide the “name“
  18. CSS 实现色彩渐变
  19. 目前几种常见穿NAT的方法分析
  20. 宽带,猫,路由器的关系是什么?

热门文章

  1. arduinowifi.send怎么获取响应_Vue3.0 响应式原理 (一)
  2. python信用卡违约预测分析_Python数据分析及可视化实例之银行信用卡违约预测(24)...
  3. react 使用 leaflet 百度地图_【React】react项目中应用百度地图添加起始点绘制路线...
  4. webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode)
  5. RuoYi-Cloud 部署篇_03(windows环境 mysql版本)
  6. 动态修改网页icon图标
  7. 小程序开发(12)-之分页封装
  8. java map用二叉树_【课堂笔记分享】linkedlist、二叉树、hashmap
  9. 51php 数据不同步,php避免循环查询数据库优化一对多查询
  10. java类验证和装载顺序_Java类的加载机制和双亲委派模型