1. /*
  2. ID: shangca2
  3. LANG: C++
  4. TASK: msquare
  5. */
  6. #include <iostream>
  7. #include<cstdio>
  8. #include<cstring>
  9. #include<algorithm>
  10. #include<stdlib.h>
  11. #include<queue>
  12. #define INF 0xfffffff
  13. using namespace std;
  14. int o[];
  15. typedef struct node
  16. {
  17. int num;
  18. int a[],pre;
  19. char c;
  20. }st;
  21. st q[],ss;
  22. char s1[],s2[];
  23. int f[][][][][][][];
  24. void bfs()
  25. {
  26. int i,d=,p=,minz = INF;
  27. q[d].num = ;
  28. q[d].pre = -;
  29. for(i = ; i <= ; i++)
  30. q[d].a[i] = i;
  31. f[][][][][][][] = ;
  32. while(p!=d)
  33. {
  34. p++;
  35. ss = q[p];
  36. if(ss.num>minz)
  37. continue;
  38. for(i = ; i <= ; i++)
  39. {
  40. if(ss.a[i]!=o[i])
  41. break;
  42. }
  43. if(i==)
  44. {
  45. int x = ss.pre,w=;
  46. s2[w++] = ss.c;
  47. while(x!=-)
  48. {
  49. s2[w++] = q[x].c;
  50. x = q[x].pre;
  51. }
  52. s2[w] = '\0';
  53. if(ss.num<minz)
  54. {
  55. minz = ss.num;
  56. strcpy(s1,s2);
  57. }
  58. else
  59. {
  60. if(strcmp(s2,s1)>)
  61. strcpy(s1,s2);
  62. }
  63. continue;
  64. }
  65. int b[];
  66. for(i = ; i >= ; i--)
  67. b[i] = ss.a[-i+];
  68. if(!f[b[]-][b[]-][b[]-][b[]-][b[]-][b[]-][b[]-])
  69. {
  70. d++;
  71. q[d].num = ss.num+;
  72. q[d].c = 'A';
  73. q[d].pre = p;
  74. f[b[]-][b[]-][b[]-][b[]-][b[]-][b[]-][b[]-] = ;
  75. for(i = ; i <= ; i++)
  76. q[d].a[i] = b[i];
  77. }
  78. for(i = ; i <= ; i++)
  79. {
  80. if(i>&&i<=)
  81. b[i] = ss.a[i-];
  82. if(i==)
  83. b[i] = ss.a[];
  84. if(i==)
  85. b[i] = ss.a[];
  86. if(i>&&i<)
  87. b[i] = ss.a[i+];
  88. }
  89. if(!f[b[]-][b[]-][b[]-][b[]-][b[]-][b[]-][b[]-])
  90. {
  91. d++;
  92. q[d].num = ss.num+;
  93. q[d].c = 'B';
  94. q[d].pre = p;
  95. f[b[]-][b[]-][b[]-][b[]-][b[]-][b[]-][b[]-] = ;
  96. for(i = ; i <= ; i++)
  97. q[d].a[i] = b[i];
  98. }
  99. for(i = ; i <= ; i++)
  100. {
  101. if(i==)
  102. b[i] = ss.a[];
  103. else if(i==)
  104. b[i] = ss.a[];
  105. else if(i==)
  106. b[i] = ss.a[];
  107. else if(i==)
  108. b[i] = ss.a[];
  109. else b[i] = ss.a[i];
  110. }
  111. if(!f[b[]-][b[]-][b[]-][b[]-][b[]-][b[]-][b[]-])
  112. {
  113. d++;
  114. q[d].num = ss.num+;
  115. q[d].c = 'C';
  116. q[d].pre = p;
  117. f[b[]-][b[]-][b[]-][b[]-][b[]-][b[]-][b[]-] = ;
  118. for(i = ; i <= ; i++)
  119. q[d].a[i] = b[i];
  120. }
  121. }
  122. printf("%d\n",minz);
  123. if(minz!=)
  124. {
  125. int k = strlen(s1),qq=;
  126. for(i = k- ; i>= ; i--)
  127. {
  128. qq++;
  129. cout<<s1[i];
  130. if(qq%==||i==)
  131. puts("");
  132. }
  133. }
  134. else
  135. puts("");
  136. }
  137. int main()
  138. {
  139. freopen("msquare.in","r",stdin);
  140. freopen("msquare.out","w",stdout);
  141. int i;
  142. for(i =; i <= ; i++)
  143. cin>>o[i];
  144. bfs();
  145. return ;
  146. }

这题 亮点在于开了个7维数组。。。

USACO3.25Magic Squares(bfs)的更多相关文章

  1. Leetcode之广度优先搜索(BFS)专题-279. 完全平方数(Perfect Squares)

    Leetcode之广度优先搜索(BFS)专题-279. 完全平方数(Perfect Squares) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ar ...

  2. 深搜(DFS)广搜(BFS)详解

    图的深搜与广搜 一.介绍: p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; orp ...

  3. 【算法导论】图的广度优先搜索遍历(BFS)

    图的存储方法:邻接矩阵.邻接表 例如:有一个图如下所示(该图也作为程序的实例): 则上图用邻接矩阵可以表示为: 用邻接表可以表示如下: 邻接矩阵可以很容易的用二维数组表示,下面主要看看怎样构成邻接表: ...

  4. 深度优先搜索(DFS)与广度优先搜索(BFS)的Java实现

    1.基础部分 在图中实现最基本的操作之一就是搜索从一个指定顶点可以到达哪些顶点,比如从武汉出发的高铁可以到达哪些城市,一些城市可以直达,一些城市不能直达.现在有一份全国高铁模拟图,要从某个城市(顶点) ...

  5. 【BZOJ5492】[HNOI2019]校园旅行(bfs)

    [HNOI2019]校园旅行(bfs) 题面 洛谷 题解 首先考虑暴力做法怎么做. 把所有可行的二元组全部丢进队列里,每次两个点分别向两侧拓展一个同色点,然后更新可行的情况. 这样子的复杂度是\(O( ...

  6. 深度优先搜索(DFS)和广度优先搜索(BFS)

    深度优先搜索(DFS) 广度优先搜索(BFS) 1.介绍 广度优先搜索(BFS)是图的另一种遍历方式,与DFS相对,是以广度优先进行搜索.简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次 ...

  7. 图的 储存 深度优先(DFS)广度优先(BFS)遍历

    图遍历的概念: 从图中某顶点出发访遍图中每个顶点,且每个顶点仅访问一次,此过程称为图的遍历(Traversing Graph).图的遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础.图的 ...

  8. 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)

    一.基本思想 1)从图中的某个顶点V出发访问并记录: 2)依次访问V的所有邻接顶点: 3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到. 4) ...

  9. 层层递进——宽度优先搜索(BFS)

    问题引入 我们接着上次“解救小哈”的问题继续探索,不过这次是用宽度优先搜索(BFS). 注:问题来源可以点击这里 http://www.cnblogs.com/OctoptusLian/p/74296 ...

随机推荐

  1. iOS开发——手机号,密码,邮箱,身份证号,中文判断

    目前这些方面的判断主要是用了正则表达式 手机号的判断,目前主要是长度.均是数字,支持的号段由于第三方通讯比如京东通讯,小米通讯等支持的号段挺多, 有171,170,135,147等等,所以号段限制简单 ...

  2. Java实战之02Hibernate-02映射、一级缓存、实体对象状态

    五.映射基础 1.实体类采用javabean的编写规范 JavaBean编写规范: a.类一般是public的 b.有默认的构造方法 c.字段都是私有的 d.提供公有的getter和setter方法 ...

  3. ORA-22275: invalid LOB locator specified

    性能测试20行和20000行的出现错误 20行的字符没有问题,两万行的出行问题如下 [2014-02-11 09:21:03.343665][17694862] Level 0 cicmpub.C: ...

  4. msyql判断记录是否存在的三种方法

    1. select count(*) from .... 这种方法最常见但是效率比较低,因为它需要扫描所有满足条件的记录 2. select 1 from xxxtable where .... 这种 ...

  5. 安装FreeMind

    Freemind 1.0.0 官方正式版下载地址:http://dl.pconline.com.cn/html_2/1/131/id=46751&pn=0.html 软件介绍: Freemin ...

  6. Stable Matching 稳定匹配 婚姻算法 shapley 算法

    作者:jostree  转载请注明出处 http://www.cnblogs.com/jostree/p/4051286.html 稳定匹配问题:有N男N女,每个人对于异性都一个排名,先需要得到一种稳 ...

  7. 重新安装Ubuntu12.04

    重新安装Ubuntu12.04 之所以我重新安装Ubuntu,因为我第一次给根目录分配的空间过小,好像是20GB吧~结果编译Android的时候,编译了3个小时候直接中止掉了.郁闷.这个也告诉我们一定 ...

  8. textarea限定字数提示效果

    最近工作中要实现的一个效果是:在textarea中输入字符会提示剩余多少字符可输入.于是马不停蹄的开始查阅资料. HTML代码: <table> <colgroup> < ...

  9. asp.net发送E-mail

    发送电子邮件也是项目开发当中经常用到的功能,这里我整理了一个发送电子邮件(带附件,支持多用户发送,主送.抄送)的类库,供大家参考. 先上两个实体类,用于封装成Mail对象. /// <summa ...

  10. jquery 100%全屏自适应宽可点击左右和焦点的自动切换幻灯片特效

    http://www.divcss5.com/css-texiao/texiao717.shtml http://d.divcss5.com/divcss5/down/2014062201.zip