USACO 3.2 msquare 裸BFS
又是个裸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的更多相关文章
- D. Kilani and the Game 解析(裸BFS、實作)
Codeforce 1105 D. Kilani and the Game 解析(裸BFS.實作) 今天我們來看看CF1105D 題目連結 題目 給一個\(n\times m\)的地圖,地圖上有幾種格 ...
- 裸BFS题若干
1poj 3278 http://poj.org/problem?id=3278 #include<math.h> #include<algorithm> #include&l ...
- USACO(含training section)水题合集[5/未完待续]
(1) USACO2.1 Ordered Fractions 枚举 排序即可,注意1/1 #include<iostream> #include<cstdio> #includ ...
- poj1724ROADS(BFS)
链接 本来想写spfa 加点什么限制什么的可能就过了 写着写着就成裸BFS了 也没优化就水过了 #include <iostream> #include<cstdio> #in ...
- URAL 1008 - Image Encoding(bfs坑爹题)
坑爹题,两种输入输出互相交换,裸bfs #include <stdio.h> #include <string.h> typedef struct { int x; int y ...
- hdu_1253_胜利大逃亡(bfs+剪枝)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1253 题意:三维BFS,不解释 题解:DFS+剪枝会超时,裸BFS会超时,BFS+剪枝才能AC,有点伤 ...
- #搜索# #BFS# #优先队列# ----- OpenJudge鸣人和佐助
OpenJudge 6044:鸣人和佐助 总时间限制: 1000ms 内存限制: 65536kB 描述 佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢? 已知一张地图(以二维矩阵的形式表示)以及佐 ...
- 【BZOJ】1627: [Usaco2007 Dec]穿越泥地(bfs)
http://www.lydsy.com/JudgeOnline/problem.php?id=1627 裸bfs不解释.. #include <cstdio> #include < ...
- 洛谷P1443 马的遍历(bfs,注意输出格式)
题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出 ...
随机推荐
- android:ToolBar详解(手把手教程)
今年(2014) 的 google i/o 发表令多数人为之一亮的 material design,而 google 也从「google i/o 2014」 开始,大家也陆陆续续地看到其更新的 and ...
- System.Net.Sockets.Socket SendAsync System.ObjectDisposedException: Cannot access a disposed object.
发生未处理的域异常! System.ObjectDisposedException: Cannot access a disposed object. Object name: 'System.Net ...
- 24Mybatis_延迟加载——用association来实现
resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能. 需求: 如果查询订单并且关 ...
- 18SpringMvc_在业务控制方法中收集数组参数
这篇文章我们要解决的问题的多选框选中,并批量删除. 比如:
- win server 2008配置ftp无法登陆问题的解决办法
解决办法放在最前面,方便急需答案的同学: 创建了ftp使用的windows账户后,一定要给该账户添加ftp目录的权限,如下图所示,为新账户添加权限后(且设置了“ftp身份验证”),即可正常访问ftp: ...
- [vim配置]windows下在vim中使用gcc/g++编译调试c/cpp文件
在Linux里面混了一个多月,vim编程用得甚爽.无奈前天将Linux里面的编程文件夹误删,而技术不精无法找回,悲痛欲绝.再者,无限怀念windows里面的游戏,并觉得现在在Linux里面也学不到什么 ...
- Android -- 使用inBitmap要注意的地方
SDK版本 需要注意的是inBitmap只能在3.0以后使用.2.3上,bitmap的数据是存储在native的内存区域,并不是在Dalvik的内存堆上. 在android3.0开始,系统在Bitma ...
- 如何下载Hibernate
官网: http://hibernate.org/ 打开hibernate官网,选择Hibernate ORM,点击左侧的Downloads 点击Downloads后,可以看到如下页面,右侧是各个版本 ...
- 第一个C语言编译器是怎样编写的?
首先向C语言之父Dennis MacAlistair Ritchie致敬! 当今几乎所有的实用的编译器/解释器(以下统称编译器)都是用C语言编写的,有一些语言比如Clojure,Jython等是基于J ...
- 用html5+js实现掌机游戏赛车demo
最近无聊,用html5+js做了一个以前玩过的掌机赛车游戏,顺便学习一下画布的api以及巩固一下js基础. 游戏界面,没做什么美化. 游戏规则:游戏界面分为三列,黑色方块随机落下,红色方块可以在三列自 ...