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 ...
随机推荐
- svn---命令行操作
一.基本操作 1.checkout是将服务器上的代码下载到本地(下载所有文件).Checkout只需要做一次 2.commit是将本地修改之后的文件提交到服务器(只提交修改之后的).每天下班前:com ...
- 标准C++中string类的用法
转自博客园:http://www.cnblogs.com/xFreedom/archive/2011/05/16/2048037.html 相信使用过MFC编程的朋友对CString这个类的印象应该非 ...
- apache 工作模式
apache三种工作模式: prefork(2.4前默认)/worker/event(2.4默认)内容整理来自以下网站http://m.blog.csdn.net/article/details?id ...
- xps文档打印后winform界面文字丢失
最近做的xps文档打印功能,绝对的一波三折,一开始开发的时候,始终用的是xps writer 虚拟打印机,测试的时候也是,一直没有发现问题,但是真正到用户使用的时候,接上正式打印机,打印时候没有问题, ...
- 实现一个div在浏览器水平居中
第一种方法: div { margin: 0 auto; width: 960px; } 第二种方法(兼容IE): body { text-align: center; } div { margin: ...
- NOSQL之【WIN7的安装配置】
1.下载安装 大家根据各自系统配置,下载相对应的redis版本.我下载是redis 2.6 将redis.conf 复制到 bin/release/redisbin 里面 redis-server.e ...
- [HTML]marquee标签属性详解
请大家先看下面这段代码:<marquee direction=upbehavior=scrollloop=3scrollamount=1 scrolldelay=10align=topbgcol ...
- MVC 中 使用TagBuilder扩展HtmlHelper
TagBuilder就是标签建造器,我们就用它来建造属于我们自己标签生成函数. 无废话,直接上代码 例: using System.Web.Mvc; public static class HtmlE ...
- C#细节忽略的问题:int 与 int?
int 与 int? 天天都在看,却不知道这2有什么区别呢? 首先说明下这个?的由来吧:C#值类型使不可谓null的,但是sql server的 int 确是可以为null的. 废话不多说直接上代码 ...
- [C和指针] rearrange.c
C和指针_程序1.1_重排字符 /* ** 这个程序从标准输入(键盘)中读取输入行并按需求处理后在标准输出(屏幕)中打印, ** 每个输入行的后面一行是该行按需求处理后的输出内容. ** ** 输入的 ...