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 ...
随机推荐
- [翻译][MVC 5 + EF 6] 6:创建更复杂的数据模型
原文:Creating a More Complex Data Model for an ASP.NET MVC Application 前面的教程中,我们使用的是由三个实体组成的简单的数据模型.在本 ...
- 踩过的坑系列之InputStream.read(byte[])方法
项目之前都是好好的,最近现场那边出现一个问题,报错不是合法的json字符串,这个json字符串是通过http请求访问获得的. 通过直接在浏览器上直接访问http这个请求,发现返回的json也是完全正确 ...
- sql System.Data.SqlClient.SqlError: 无法覆盖文件 'C:\Program Files\Microsoft SQL Server\MSSQL\data\itsm_Data.MDF'。数据库 'my1' 正在使用该文件的解决方案
对数据库备份进行还原时遇到“sql System.Data.SqlClient.SqlError: 无法覆盖文件 'C:\Program Files\Microsoft SQL Server\MSSQ ...
- 前端资源多个产品整站一键打包&包版本管理(二)——如何在bower的配置文件加上注释
问题: 当一个工程里面有好几个项目,每个项目引用同一个包,但是不同的名字,例如在bower中 fancybox 跟 jquery.fancybox 是一样的,我们只需要下载其中的一个版本,而打包工作不 ...
- ACE_linux:读写锁
1.涉及类 ACE_RW_Thread_Mutex //ACE读写锁ACE_Read_Guard //ACE加读锁ACE_Write_Guard //ACE加写锁ACE_Thread_Manager ...
- SQL技术内幕二DDL
创建数据库: if db_id('DBTest') is nullcreate database DBTest 创建表 use eb_fy_data_test---use 切换所在数据库上下文 if ...
- 【6】了解Bootstrap栅格系统基础案例(1)
从上一张我们了解了栅格选项,那么我们就来了实战了解下吧(其实还是中文官网的案例) ps.我这里是电脑上用谷歌浏览器来观察的,毕竟电脑的分辨率高(1440*900px),谷歌浏览器最大化后,值比大屏幕设 ...
- 补充:学会Twitter Bootstrap不再难
博客园的兄弟姐妹们很给力,自从这篇文章写出后,有人可能会对2.x版本升级到3.x版本的区别有些好奇和模糊.现在将官方给出的说明贴上去: 从2.x升级到3.0版本 Bootstrap 3并不向后兼容Bo ...
- NSStringUIImage~NSData的相互转换以及中文转码
中文转码 str = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 图片编码 NSData *data; ...
- 用android-x86模拟器不能运行程序错误Tag:libc的问题
如果用的是x86的android模拟器,运行软件时一闪就关闭logcat中:类似:Fatal signal 11 (SIGSEGV) at 0x00000078 (code=1), thread 16 ...