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 ...
随机推荐
- javascript Date类型 学习笔记
1 创建一个新的日期对象,如果不带参数,则对象自动获得当前的日期和时间 var d = new Date() 2 如果需要指定特定的日期,则可以通过Date.parse() 或者 Date().UTC ...
- [.Net MVC] 过滤器以及异常处理
项目:后台管理平台 意义:程序发布后,不应该对用户显示因程序出错和崩溃而出现的错误信息,采用统一友好的错误页面,并将错误信息记录到日志中供管理人员查看. 一.过滤器Filter Filter(筛选器) ...
- springmvc学习(三)
第一点---------使用 @RequestMapping 映射请求• Ant 风格资源地址支持 3 种匹配符:?:匹配文件名中的一个字符 *:匹配文件名中的任意字符 **:** 匹配多层路径 @R ...
- [cocos2d-x 2.0.4][iOS7]不能全屏问题
本篇文章由:http://www.sollyu.com/cocos2d-x-2-0-4-ios7-cannot-be-full-screen-problem/ 说明 ▼ 症状如下图 解决 打开你工程的 ...
- Web前端新人笔记之jquery选择符
jquery利用了CSS选择符的能力,让我们能够在DOM中快捷而轻松的获取元素或元素集合.本章将介绍以下内容: 1.网页中的元素结构: 2.如何通过CSS选择符在页面中查找元素: 3.扩展jquery ...
- JavaScript中的运算符种类及其规则介绍
JavaScript中的运算符有很多,主要分为算术运算符,等同全同运算符,比较运算符,字符串运算符,逻辑运算符,赋值运算符等.这些运算符都有一些属于自己的运算规则,下面就为大家介绍一下JavaScri ...
- MINA实战
backlog,放入到acceptor队列中还未处理最大数量: solinger参数,用来说明close之后是否直接关闭:参数越大,等待时间越长. mina中的udp处理,即使对端关闭也会继续传输,但 ...
- python 读取机器信息
本人最近新学python ,用到关于机器的相关信息,经过一番研究,从网上查找资料,经过测试,总结了一下相关的方法. # -*- coding: UTF8 -*- import os import wi ...
- 使用text-overflow:ellipsis对溢出文本显示省略号有两个好处
使用text-overflow:ellipsis对溢出文本显示省略号有两个好处,一是不用通过程序限定字数:二是有利于SEO.需要使用对对溢出文本显示省略号的通常是文章标题列表,这样处理对搜索引擎更友好 ...
- round(x[, n]) : 四舍五入
>>> round(12.3) 12.0 >>> round(12.5) 13.0 >>> round(12.36) 12.0 >>& ...