又是个裸BFS...

和西安网赛那道1006一样的,只不过加上了要记录方案。顺便复习map

记录方案直接在bfs队列的结点里加一个vector<int> opt,把从开头一直到当前结点的操作序列记下来

 /*
PROB:msquare
LANG:C++
*/ #include <iostream>
#include <vector>
#include <algorithm>
#include <map>
#include <queue>
#include <cstdio>
using namespace std; struct node
{
vector<int> seq;
int step;
vector<int> opt;
node(vector<int> x,int m,vector<int> o,int op):seq(x),step(m),opt(o)
{
opt.push_back(op);
}
}; map<vector<int>,int> M;
queue<node> Q;
vector<int> a; //tmp2
vector<int> A; //init
vector<int> y; //tmp1
vector<int> B; //goal
vector<int> ans;
vector<int> yy;
int b[]; bool same()
{
for (int i=;i<;i++)
if (y[i]!=b[i])
return false;
return true;
} int main()
{
freopen("msquare.in","r",stdin);
freopen("msquare.out","w",stdout); B.clear();
a.clear();
A.clear();
for (int i=;i<=;i++)
{
cin>>b[i];
A.push_back(i+);
}
for (int i=;i>=;i--)
{
cin>>b[i];
A.push_back(i+);
}
for (int i=;i<;i++)
B.push_back(b[i]); //for (int i=0;i<8;i++)
// cout<<B[i]<<" "<<A[i]<<endl; //A[0]=1; A[1]=2; A[2]=3; A[3]=4;
//A[4]=8; A[5]=7; A[6]=6; A[7]=5;
Q.push(node(A,,a,));
M.insert(pair<vector<int>,int>(A,));
while (!Q.empty())
{
node tmp=Q.front();
Q.pop();
int st=tmp.step;
//cout<<"step "<<st<<endl;
y=tmp.seq;
yy=tmp.opt;
if (same())
{
ans.clear();
ans=tmp.opt;
cout<<st<<endl;
for (int i=;i<=st;i++)
{
char ch=ans[i]+'A'-;
cout<<ch;
}
cout<<endl;
break;
}
else
{
//opr1
a=y;
swap(a[],a[]);
swap(a[],a[]);
swap(a[],a[]);
swap(a[],a[]);
if (!M.count(a))
{
M.insert(pair<vector<int>,int>(a,));
Q.push(node(a,st+,yy,));
}
//opr2
a=y;
int t1=a[],t2=a[];
a[]=a[]; a[]=a[];
a[]=a[]; a[]=a[];
a[]=a[]; a[]=a[];
a[]=t1; a[]=t2;
if (!M.count(a))
{
M.insert(pair<vector<int>,int>(a,));
Q.push(node(a,st+,yy,));
}
//opr3
a=y;
int tm=a[];
a[]=a[]; a[]=a[]; a[]=a[]; a[]=tm;
if (!M.count(a))
{
M.insert(pair<vector<int>,int>(a,));
Q.push(node(a,st+,yy,));
}
}
} return ;
}

USACO 3.2 msquare 裸BFS的更多相关文章

  1. D. Kilani and the Game 解析(裸BFS、實作)

    Codeforce 1105 D. Kilani and the Game 解析(裸BFS.實作) 今天我們來看看CF1105D 題目連結 題目 給一個\(n\times m\)的地圖,地圖上有幾種格 ...

  2. 裸BFS题若干

    1poj 3278 http://poj.org/problem?id=3278 #include<math.h> #include<algorithm> #include&l ...

  3. USACO(含training section)水题合集[5/未完待续]

    (1) USACO2.1 Ordered Fractions 枚举 排序即可,注意1/1 #include<iostream> #include<cstdio> #includ ...

  4. poj1724ROADS(BFS)

    链接 本来想写spfa 加点什么限制什么的可能就过了 写着写着就成裸BFS了 也没优化就水过了 #include <iostream> #include<cstdio> #in ...

  5. URAL 1008 - Image Encoding(bfs坑爹题)

    坑爹题,两种输入输出互相交换,裸bfs #include <stdio.h> #include <string.h> typedef struct { int x; int y ...

  6. hdu_1253_胜利大逃亡(bfs+剪枝)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1253 题意:三维BFS,不解释 题解:DFS+剪枝会超时,裸BFS会超时,BFS+剪枝才能AC,有点伤 ...

  7. #搜索# #BFS# #优先队列# ----- OpenJudge鸣人和佐助

    OpenJudge 6044:鸣人和佐助 总时间限制: 1000ms  内存限制: 65536kB 描述 佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢? 已知一张地图(以二维矩阵的形式表示)以及佐 ...

  8. 【BZOJ】1627: [Usaco2007 Dec]穿越泥地(bfs)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1627 裸bfs不解释.. #include <cstdio> #include < ...

  9. 洛谷P1443 马的遍历(bfs,注意输出格式)

    题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出 ...

随机推荐

  1. java9-5 修饰符

    1. 修饰符: 权限修饰符:private,默认的,protected,public 状态修饰符:static,final 抽象修饰符:abstract 类: 权限修饰符:默认修饰符,public 状 ...

  2. javascript中的队列结构

    1.概念 队列和栈结构不同,栈是一种后进先出的结构,而队列是一种先进先出的结构.队列也是一种表结构,不同的是队列只能在队尾插入元素,在队首删除元素,可以将队列想象成一个在超时等待排队付钱的队伍,或者在 ...

  3. beanFactoory介绍

  4. iBATIS.net获取运行时sql语句

    [本文原创,第一次离首页如此之近.发在候选区攒攒rp,管理员看着不合适可以撤下.] 虽然只在iBatis的世界里小打小闹匆匆数月,却历经数次与领导和同事激辩,再通过不懈努力学习和开发积累,楼猪终于被它 ...

  5. IOS开发之——类似微信摇一摇的功能实现

    首先,一直以为摇一摇的功能实现好高大上,结果百度了.我自己也模仿写了一个demo.主要代码如下: 新建一个项目,名字为AnimationShake. 主要代码: - (void)motionBegan ...

  6. 20145208《Java程序设计》第3周学习总结

    20145208 <Java程序设计>第3周学习总结 教材学习内容总结 认识对象 类类型 在第三章的学习中,我了解到JAVA可区分为基本类型和类类型两种类型,在上周的学习中我学习了JAVA ...

  7. 详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析]

    目录 前言 现象 源码分析 HandlerMethodArgumentResolver与HandlerMethodReturnValueHandler接口介绍 HandlerMethodArgumen ...

  8. 随便谈谈用canvas来实现文字图片粒子化

    声明:本文为原创文章,如需转载,请注明来源WAxes,谢谢! 看了岑安大大的教程http://www.cnblogs.com/hongru/archive/2012/03/28/2420415.htm ...

  9. Sea.js & Require.js

    Sea.js 追求简单.自然的代码书写和组织方式,具有以下核心特性: 简单友好的模块定义规范:Sea.js 遵循 CMD 规范,可以像 Node.js 一般书写模块代码. 自然直观的代码组织方式:依赖 ...

  10. [BZOJ 1797][AHOI2009]最小割(最小割关键边的判断)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1797 分析: 在残余网络中看: 对于第1问: 1.首先这个边必须是满流 2.其次这个边 ...