直接上$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. jdk8 时间日期工具类(转)

    package com.changfu.common.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import jav ...

  2. Elasticsearch7.1中文文档-第一章-入门

    安装openjdk wget --no-cookies --no-check-certificate --header "Cookie: oraclelicense=accept-secur ...

  3. C++虚函数和成员函数内存 this指针问题

    father* p=new son; p->disp(...); 发现有好多人this指针的本质有错误的认识,估计不少人一说起this指针,脑袋立即反应出:那个类里使用的this指针,那么这个指 ...

  4. kubernetes将集群外部流量引入集群内

    一.service:pod是有生命周期的,我们想给客户一个固定的访问端点,在客户端与服务端之间启动一个固定的中间层,依赖于kubernetes的一个附件CoreDns.kubernetes有三类网路地 ...

  5. Python地理信息数据可视化

    地图 基础铺垫 定义 地图(map):是指按一定的比例运用符号.颜色.文字标记等描绘显示地球表面的自然地理.行政区域.社会经济状况的图形. 地图绘制步骤 绘制需要展示的地图,获取地图对象,获取每个区域 ...

  6. Linux+CLion+树莓派远程编译时,Cmake编译出现undefined reference to 'dlopen'的解决办法

    在Clion中链接讯飞的语音库并传至树莓派上编译时,出现如下错误. undefined reference to `dlopen' undefined reference to `dlclose' u ...

  7. 平衡Dom总结

    介绍: 新的项目中有些Dom元素需要和画布保持统一个适配比例 项目地址: 宝岛之光-台湾偶像剧 遇到的问题 H5项目使用Canvas, 适配采用保持宽高比例, 上下或者左右留白方式 在项目中有些Dom ...

  8. C#_类

    1:访问修饰符 访问修饰符可以定义应用程序中类成员的作用域.和C++有一些不同,下面说明一下: public:访问不受限制,public成员可以被任何其他类访问. private:访问只限于包含该成员 ...

  9. Content:"\2715",特殊字符和图标

    原文 项目中用到的一些特殊字符和图标 html代码 <div class="cross"></div> css代码 1 2 3 4 5 6 7 8 9 10 ...

  10. Python 生成随机数函数和加密函数(MD5)

    内容来自debugtalk import hashlib import random import string def gen_random_string(str_len): '''生成指定长度的随 ...