直接上$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. <script language= "javascript " for= "window " event= "onload ">

    狼-志 EVENT   event   设置或获取脚本编写用于的事件   FOR   htmlFor   设置或获取绑定到事件脚本的对象. 可以这样理解. <script   language= ...

  2. struts2之关联查询(5)

    需要关联四个表 select g.*,b.name brname,s.bid,s.sname,bi.name biname  from T_GOODS g left join T_brand b on ...

  3. C# 设置程序开机自启动

    设置启动 //设置开机自启动 string path = Application.ExecutablePath; RegistryKey rk = Registry.LocalMachine; Reg ...

  4. BZOJ 3772: 精神污染 (dfs序+树状数组)

    跟 BZOJ 4009: [HNOI2015]接水果一样- CODE #include <set> #include <queue> #include <cctype&g ...

  5. 09 saltstack生产实例--Haproxy+keepalived

    1.如何理解haproxy+keepalived https://www.cnblogs.com/zs-wei/p/9213961.html HaProxy可以通过监听一个统一的端口对外提供能力,然后 ...

  6. 题解 [51nod1607] 卷积和

    题面 解析 神仙LZF随机找出的毒瘤题. 一开始读题过于草率导致\(naive\)了. step 1 看上去特别像数位DP(实际上也有一点). 先预处理出有\(i\)位的数(最高位不为\(0\))的数 ...

  7. 解决Spring AOP Controller 不生效

    在spring-mvc.xml文件中,进行以下配置,就可以实现在Controller中, 方法一:最简单的,在spring-mvc.xml配置文件中,添加以下语句 spring-mvc.xml < ...

  8. 二维DFT

    学习DIP第4天 傅里叶变换数学原理会在后续完整介绍,目前只实现代码,观察下结果,公式在上一篇博客中已经描述 内容迁移至 http://www.face2ai.com/DIP-2-2-二维DFT/ h ...

  9. codeforces555E

    Case of Computer Network CodeForces - 555E Andrewid the Android is a galaxy-known detective. Now he ...

  10. 无法连接虚拟设备 ide1:0及上不网

    无法连接虚拟设备 ide1:0 问题: 启动vmware之后,发现出现无法连接 ide 1:0. 网络查找之后,发现是之前挂载的iso镜像找不到了. 原因: 我把iso镜像放到其他位置. 解决: 指定 ...