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 ...
随机推荐
- Xcode中添加代码块的方式
在写代码的过程中,经常会有重复的代码(比如说,cell的使用),当然了复制粘贴也不是不行,但是Xcode提供了一个很方便的东西. 1.在Xcode右下角你会看到有一个{}的东西,这里是一些常用的代码块 ...
- .Net 程序集 签名工具sn.exe 密钥对SNK文件 最基本的用法
阐述签名工具这个概念之前,我先说说它不是什么: 1.它不是用于给程序集加密的工具,它与阻止Reflector或ILSpy对程序集进行反编译一毛钱关系都没有. 2.它很讨厌人们把它和加密联系在一起. 我 ...
- javascript 第27节 jQuery选择器
下面的html需要以下2个文件: 1.style.css div,span,p { width:140px; height:140px; margin:5px; background:#aaa; bo ...
- Java多线程--同步函数
/*需求:银行有一个金库有两个储户分别存300元 每次存100元,存3次 目的:该程序是否有安全问题,如果有,如何解决? 如何找问题(很重要)1.明确哪些代码是多线程运行代码2.明确共享数据3.明确多 ...
- HttpClient Post Get请求方法,留在以后可能会用到
/// <summary> /// Post请求返回实体 /// </summary> /// <param name="url">请求地址&l ...
- windows phone 网易云阅读hubtile效果实现
效果图 曾几何时,刚接触wp的时候做了一个类似的界面,不过是Rectangle实现的,还是一个个摆的..囧啊 现在感觉这种应该是用hubtile实现的,Toolkit(http://silverlig ...
- linksys wrt160nv3 刷dd-wrt固件
家中有个闲置的wrt160nv3路由器,无意中在网上发现可以刷dd-wrt固件来实现更多功能.目前家里电信光猫F460的自带无线使用起来不是很稳定,就想把wrt160nv3刷成dd-wrt来当做一个A ...
- read/write数据读写传输方式(转)
前言 笔者本打算撰写一篇讲解标准I/O(缓存I/O)的博文,但是发现已经有网友做过同样的工作,并且工作质量上乘,特转载于此. 原文地址http://lenky.info/archives/2012/0 ...
- hybird app
Hybrid App 是混合模式应用的简称,兼具 Native App 和 Web App 两种模式应用的优势,开发成本低,拥有 Web 技术跨平台特性.目前大家所知道的基于中间件的移动开发框架都是采 ...
- ICBC中的路由设置
才去的中国工商银行,用身份证叫了A0076的号,前边还有26个人,闲来无聊果断拿出手机收取wifi.有两个ssid为ICBC的路由,信道分别是1号和6号,还好不需要密码,不过一会就连接上了. 那我先上 ...