直接上$bfs$,每一个状态记录下当前字符串的样子,空格的位置,和走到这个状态的答案。

用空格的位置转移,只有$50pts$

考虑到题目一个性质:$W$只往右走,$B$只往左走,就可以过了。

 #include<cstdio>
#include<algorithm>
#include<vector>
#include<cstring>
#include<queue>
#include<map>
#include<iostream>
using namespace std;
#define ll long long
#define INF 0x3f3f3f3f
struct node{
int pos;
string s,ans;
};
int n;
queue<node>Q;
map<string,bool>vis;
string aim;
string bfs()
{
node st;string aim="";
st.s="";
for(int i=;i<=n;i++)
st.s+='W',aim+='B';
st.s+='@',aim+='@';
for(int i=;i<=n;i++)
st.s+='B',aim+='W';
st.pos=n;
Q.push(st);
vis[st.s]=;
while(!Q.empty())
{
node now=Q.front();Q.pop();
if(now.s==aim)
return now.ans;
//cout<<now.s<<endl;
int idx=now.pos,len=now.s.size();
node nxt=now;
if(idx->=&&nxt.s[idx-]!=nxt.s[idx-]&&nxt.s[idx-]=='W')
{
nxt.s[idx]=nxt.s[idx-];
nxt.s[idx-]='@';
//cout<<nxt.s<<endl;//
char ch=''+idx-;
nxt.ans=now.ans+ch;
nxt.pos=idx-;
if(!vis[nxt.s])
Q.push(nxt);
vis[nxt.s]=;
}
nxt=now;
if(idx->=&&nxt.s[idx-]=='W')
{
nxt.s[idx]=nxt.s[idx-];
nxt.s[idx-]='@';
//cout<<nxt.s<<endl;//
char ch=''+idx-;
nxt.ans=now.ans+ch;
nxt.pos=idx-;
if(!vis[nxt.s])
Q.push(nxt);
vis[nxt.s]=;
}
nxt=now;
if(idx+<len&&nxt.s[idx+]=='B')
{
nxt.s[idx]=nxt.s[idx+];
nxt.s[idx+]='@';
char ch=''+idx+;
nxt.ans=now.ans+ch;
nxt.pos=idx+;
if(!vis[nxt.s])
Q.push(nxt);
vis[nxt.s]=;
}
nxt=now;
if(idx+<len&&nxt.s[idx+]!=nxt.s[idx+]&&nxt.s[idx+]=='B')
{
nxt.s[idx]=nxt.s[idx+];
nxt.s[idx+]='@';
char ch=''+idx+;
nxt.ans=now.ans+ch;
nxt.pos=idx+;
if(!vis[nxt.s])
Q.push(nxt);
vis[nxt.s]=;
}
}
return "";
}
int main()
{
//freopen("shuttle.in","r",stdin);
//freopen("shuttle.out","w",stdout);
scanf("%d",&n);
string c=bfs();
//cout<<c<<endl;
int tot=;
for(int i=;i<c.size();i++)
{
tot++;
printf("%d",c[i]-''+);
if(tot==||i==c.size()-)
{
puts("");
tot=;
}
else printf(" ");
}
return ;
}

Code

USACO4.4 Shuttle Puzzle【bfs+优化】的更多相关文章

  1. USACO 4.4 Shuttle Puzzle

    Shuttle PuzzleTraditional The Shuttle Puzzle of size 3 consists of 3 white marbles, 3 black marbles, ...

  2. 2013年第四届蓝桥杯国赛 九宫重排(HashMap+双BFS优化)

    九宫重排     时间限制:1.0s   内存限制:256.0MB 问题描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干 ...

  3. 最少步数(dfs + bfs +bfs优化)

    最少步数 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 ...

  4. 洛谷 2831 (NOIp2016) 愤怒的小鸟——仅+1所以bfs优化

    题目:https://www.luogu.org/problemnew/show/P2831 状压dp.跑得很慢.(n^2*2^n) 注意只打一只猪的情况. #include<iostream& ...

  5. POJ2308连连看dfs+bfs+优化

    DFS+BFS+MAP+剪枝 题意:       就是给你一个10*10的连连看状态,然后问你最后能不能全部消没? 思路:      首先要明确这是一个搜索题目,还有就是关键的一点就是连连看这个游戏是 ...

  6. hdu-1728(bfs+优化)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1728 注意:1.先输入起点(y1,x1)和终点(y2,x2): 2.如果一个一个遍历会超时. 思路:每 ...

  7. hdu5411 CRB and Puzzle[矩阵优化dp]

    CRB and Puzzle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  8. p2739 Shuttle Puzzle

    观察样例得知就是和离'_'左边最近的'w'交换位置,然后和离'_'右边最近的'b'交换位置,轮流进行. #include <iostream> #include <cstdio> ...

  9. POJ 1426 Find The Multiple --- BFS || DFS

    POJ 1426 Find The Multiple 题意:给定一个整数n,求n的一个倍数,要求这个倍数只含0和1 参考博客:点我 解法一:普通的BFS(用G++能过但C++会超时) 从小到大搜索直至 ...

随机推荐

  1. Kafka集群---分布式消息系统

    概念: kafka是一种消息中间件 作用: 解耦.冗余.提高扩展性.缓冲 保证顺序.灵活.削峰填谷 异步通信 kafla角色 producer: 生产者,负责发布消息 consumer: 消费者,负责 ...

  2. 我理解的windows中断管理

    只谈外部中断的windows内核管理,异常和trap不在此文的讨论之列. 1. windows中断总貌 在windows中,物理上的中断源被抽象为KINTERRUPT结构.一个中断源在windows中 ...

  3. 权势二进制(51Nod 1413)

    一个十进制整数被叫做权势二进制,当他的十进制表示的时候只由0或1组成.例如0,1,101,110011都是权势二进制而2,12,900不是. 当给定一个n的时候,计算一下最少要多少个权势二进制相加才能 ...

  4. poj1737

    Connected Graph POJ - 1737 An undirected graph is a set V of vertices and a set of E∈{V*V} edges.An ...

  5. Flask-特殊的装饰器

    视图函数中的装饰器 -----------------------视图中的装饰器---------------------- 1.如果使用的是函数视图,那么自己定义的装饰器必须放在`app.route ...

  6. ImportError: DLL load failed: 找不到指定的模块

    如果遇到错误:ImportError: DLL load failed: 找不到指定的模块出现错误原因:安装包的来源问题,也可以理解为包版本兼容问题,有的包使用官方出版,有的包使用whl文件安装 解决 ...

  7. java面试题,转载自http://www.cnblogs.com/nnngu/p/8471043.html#3914167

    Java面试题库及答案解析   1.面向对象编程(OOP)有哪些优点? 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可靠性和灵活性. 增加代码的可理解性. 2.面向对象编程有哪些特性? 封 ...

  8. xss练习,alf.nu/alert1,1-12

    觉得自己很菜,故找一些题来做,随便找了下.记一下通关攻略 https://alf.nu/alert1 第一关 题目:warmup function escape(s) { return '<sc ...

  9. 2018-2019-2 20165330《网络对抗技术》Exp8 Web基础

    目录 基础问题 相关知识 实验内容 实验步骤 实验总结与体会 实验内容 Web前端HTML 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML ...

  10. Linux设备驱动程序 之 poll和select

    使用非阻塞IO的应用程序经常使用select,poll,epoll系统调用:它们的功能本质上是一样的:都允许进程决定是否可以对一个或者多个打开的文件做非阻塞的读取或者写入:这些电泳也会阻塞进程,直到给 ...