USACO3.25Magic Squares(bfs)
/*
ID: shangca2
LANG: C++
TASK: msquare
*/
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<queue>
#define INF 0xfffffff
using namespace std;
int o[];
typedef struct node
{
int num;
int a[],pre;
char c;
}st;
st q[],ss;
char s1[],s2[];
int f[][][][][][][];
void bfs()
{
int i,d=,p=,minz = INF;
q[d].num = ;
q[d].pre = -;
for(i = ; i <= ; i++)
q[d].a[i] = i;
f[][][][][][][] = ;
while(p!=d)
{
p++;
ss = q[p];
if(ss.num>minz)
continue;
for(i = ; i <= ; i++)
{
if(ss.a[i]!=o[i])
break;
}
if(i==)
{
int x = ss.pre,w=;
s2[w++] = ss.c;
while(x!=-)
{
s2[w++] = q[x].c;
x = q[x].pre;
}
s2[w] = '\0';
if(ss.num<minz)
{
minz = ss.num;
strcpy(s1,s2);
}
else
{
if(strcmp(s2,s1)>)
strcpy(s1,s2);
}
continue;
}
int b[];
for(i = ; i >= ; i--)
b[i] = ss.a[-i+];
if(!f[b[]-][b[]-][b[]-][b[]-][b[]-][b[]-][b[]-])
{
d++;
q[d].num = ss.num+;
q[d].c = 'A';
q[d].pre = p;
f[b[]-][b[]-][b[]-][b[]-][b[]-][b[]-][b[]-] = ;
for(i = ; i <= ; i++)
q[d].a[i] = b[i];
}
for(i = ; i <= ; i++)
{
if(i>&&i<=)
b[i] = ss.a[i-];
if(i==)
b[i] = ss.a[];
if(i==)
b[i] = ss.a[];
if(i>&&i<)
b[i] = ss.a[i+];
}
if(!f[b[]-][b[]-][b[]-][b[]-][b[]-][b[]-][b[]-])
{
d++;
q[d].num = ss.num+;
q[d].c = 'B';
q[d].pre = p;
f[b[]-][b[]-][b[]-][b[]-][b[]-][b[]-][b[]-] = ;
for(i = ; i <= ; i++)
q[d].a[i] = b[i];
}
for(i = ; i <= ; i++)
{
if(i==)
b[i] = ss.a[];
else if(i==)
b[i] = ss.a[];
else if(i==)
b[i] = ss.a[];
else if(i==)
b[i] = ss.a[];
else b[i] = ss.a[i];
}
if(!f[b[]-][b[]-][b[]-][b[]-][b[]-][b[]-][b[]-])
{
d++;
q[d].num = ss.num+;
q[d].c = 'C';
q[d].pre = p;
f[b[]-][b[]-][b[]-][b[]-][b[]-][b[]-][b[]-] = ;
for(i = ; i <= ; i++)
q[d].a[i] = b[i];
}
}
printf("%d\n",minz);
if(minz!=)
{
int k = strlen(s1),qq=;
for(i = k- ; i>= ; i--)
{
qq++;
cout<<s1[i];
if(qq%==||i==)
puts("");
}
}
else
puts("");
}
int main()
{
freopen("msquare.in","r",stdin);
freopen("msquare.out","w",stdout);
int i;
for(i =; i <= ; i++)
cin>>o[i];
bfs();
return ;
}
这题 亮点在于开了个7维数组。。。
USACO3.25Magic Squares(bfs)的更多相关文章
- Leetcode之广度优先搜索(BFS)专题-279. 完全平方数(Perfect Squares)
Leetcode之广度优先搜索(BFS)专题-279. 完全平方数(Perfect Squares) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ar ...
- 深搜(DFS)广搜(BFS)详解
图的深搜与广搜 一.介绍: p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; orp ...
- 【算法导论】图的广度优先搜索遍历(BFS)
图的存储方法:邻接矩阵.邻接表 例如:有一个图如下所示(该图也作为程序的实例): 则上图用邻接矩阵可以表示为: 用邻接表可以表示如下: 邻接矩阵可以很容易的用二维数组表示,下面主要看看怎样构成邻接表: ...
- 深度优先搜索(DFS)与广度优先搜索(BFS)的Java实现
1.基础部分 在图中实现最基本的操作之一就是搜索从一个指定顶点可以到达哪些顶点,比如从武汉出发的高铁可以到达哪些城市,一些城市可以直达,一些城市不能直达.现在有一份全国高铁模拟图,要从某个城市(顶点) ...
- 【BZOJ5492】[HNOI2019]校园旅行(bfs)
[HNOI2019]校园旅行(bfs) 题面 洛谷 题解 首先考虑暴力做法怎么做. 把所有可行的二元组全部丢进队列里,每次两个点分别向两侧拓展一个同色点,然后更新可行的情况. 这样子的复杂度是\(O( ...
- 深度优先搜索(DFS)和广度优先搜索(BFS)
深度优先搜索(DFS) 广度优先搜索(BFS) 1.介绍 广度优先搜索(BFS)是图的另一种遍历方式,与DFS相对,是以广度优先进行搜索.简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次 ...
- 图的 储存 深度优先(DFS)广度优先(BFS)遍历
图遍历的概念: 从图中某顶点出发访遍图中每个顶点,且每个顶点仅访问一次,此过程称为图的遍历(Traversing Graph).图的遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础.图的 ...
- 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)
一.基本思想 1)从图中的某个顶点V出发访问并记录: 2)依次访问V的所有邻接顶点: 3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到. 4) ...
- 层层递进——宽度优先搜索(BFS)
问题引入 我们接着上次“解救小哈”的问题继续探索,不过这次是用宽度优先搜索(BFS). 注:问题来源可以点击这里 http://www.cnblogs.com/OctoptusLian/p/74296 ...
随机推荐
- ios开发之UIView的frame、bounds跟center属性的区别(附图)
博文暂时想到什么写什么,不顺理成章,不顺章成篇. 先看几个概念 坐标点Poit:向右侧为X轴正方向的值x,原点下侧为Y轴正方向的值y 大小Size:由宽度width和高度height构成,表示一个矩形 ...
- textLayout在快速输入清除时报错解决方法
var tf:TextFlow; var len:int = tf.numChildren;for (var i:int = 0; i < len; i += 1){ tf.removeChil ...
- Requirejs开篇
前言 随着页面的内容丰富,以及网站体验更好.性能优化等,原有的通过script标签引入JavaScript脚本的方式已经不能很好地解决,此时新的一种JavaScript加载方式产生了--延时加载.执行 ...
- C语言遍历一个文件夹下面的所有文件
主要用到的函数/function. These should get you started: opendir() readdir() closedir() fopen() fread() fwrit ...
- Spring MVC中Ajax实现二级联动
今天写项目遇到了二级联动,期间遇到点问题,写个博客记录一下. 后台Controller: @RequestMapping("/faultType") @ResponseBody p ...
- 啊哈!算法:解密QQ号
书中给出的算法有点浪费空间,可以使用循环队列进行改进,这样就不需要使用额外的空间,在原数组的基础上就可以完成解密,代码如下: #include <stdio.h> void decode( ...
- [可拖动DIV]刚开通博客顺便就写了点东西!
说说我自己的思路 首先需要一个初始div div { border: 1px #333 solid; width: 200px; height: 50px; } <div id="od ...
- jQuery1.8以上,ajaxSend,ajaxStart等一系列事件要绑定在document上才有效果
jQuery1.8以上,ajaxSend,ajaxStart等一系列事件要绑定在document上才有效果
- display:block; 块级元素。<a>,<span>标签设置宽度和高度
display:block;是让对象成为块级元素(比如a,span等) 转化后 可以对a或者span标签进行width和height设置,否则设置不了 display有很多对象,具体可以参考http: ...
- Winfrom 中 ComboBox 绑定数据后设置选定项问题
在为 ComboBox 当定数据的时候,如果遇到界面显示需要用文本,而获取选定项的值时需要用数字,我们就很习惯使用 DataSource 来进行绑定. 例如以下代码: List<TextVal ...