传送门

用STL中的queue,map,string写了个广搜,用一个string保存状态(见代码)注:STL比较慢,可以做一些优化(或者开O2)

#include<iostream>

#include<cstdio>

#include<string>

#include<queue>

#include<map>

using namespace std;

string start;

map<string,long long>m;//保存这个状态需要几步到达

map<string,bool>b;//判重,记录状态是否经过

queue<string>q;//队列

int main()

{

    cin>>start;

    q.push(start);

    b[start]=;
m[start]=;//处理初始状态
while(!q.empty())
{
string cnt=q.front();q.pop();//取队首
if(cnt=="")break;//目标状态(终止条件)
string s2="";
int position=cnt.find(s2,);//查找0的位置
string s3=cnt;//见下文
if(position->=)
{
swap(s3[position],s3[position-]);/*骚操作,可以交换string中两个位置的值(知道s3干什么的了吧……)*/
if(!b[s3])
{
m[s3]=m[cnt]+;
q.push(s3);
b[s3]=;
}//入队
s3=cnt;//别忘了改回来
}//往上跑
if(position->=&&(position)%!=)/*往左跑,注意判越界*/
{
swap(s3[position],s3[position-]);
if(!b[s3])
{
m[s3]=m[cnt]+;
q.push(s3);
b[s3]=;
}
s3=cnt;
}
if(position+<cnt.size()&&(position+)%!=)//往右跑
{
swap(s3[position],s3[position+]);
if(!b[s3])
{
m[s3]=m[cnt]+;
q.push(s3);
b[s3]=;
}
s3=cnt;
}
if(position+<cnt.size())//往下跑
{
swap(s3[position],s3[position+]);
if(!b[s3])
{
m[s3]=m[cnt]+;
q.push(s3);
b[s3]=;
}
s3=cnt;
}
}
printf("%d",m[""]);//因为保证有解,所以直接输出答案。
}

最新文章

  1. Matlab 读取文件夹中所有的bmp文件
  2. 结构体struts的长度
  3. gridview里日期显示格式
  4. JS-009-屏幕分辨率、浏览器显示区域、元素位置获取
  5. linux下启动dbca或netmgr类的图形界面报错解决
  6. 【POJ3580】【块状链表】SuperMemo
  7. ZJUT 1423 地下迷宫(期望DP&amp;高斯消元)
  8. oracle_解锁表_解锁用户
  9. 九、oracle 事务
  10. [Leetcode] Binary search -- 475. Heaters
  11. ArcGIS Earth(原谷歌地球)如何获取高精度矢量地图数据?(shp文件/要素类/kml)
  12. 解决在使用gensim.models.word2vec.LineSentence加载语料库时报错 UnicodeDecodeError: &#39;utf-8&#39; codec can&#39;t decode byte......的问题
  13. weblogic/tomcat Get乱码【转】
  14. selenium是如何启动浏览器的
  15. php之memcached存储session配置、存储、获取
  16. ubuntu系统中Qt creator 编辑和应用使用中文输入法
  17. [Windows Azure] Create a Virtual Network for Site-to-Site Cross-Premises Connectivity
  18. 原生JavaScript的DOM操作方法总结
  19. No.1011_第八次团队会议
  20. C#基础笔记(第十六天)

热门文章

  1. gui - tkinter 开发
  2. form常用表单标签
  3. 7.数据处理函数 ---SQL
  4. 牛客网练习赛34-D-little w and Exchange(思维题)
  5. bzoj1822: [JSOI2010]Frozen Nova 冷冻波网络流
  6. jdbc查询
  7. centOS6.5 安装后无法启动无线上网
  8. openstack安装newton版本keyston部署(一)
  9. ubuntu中执行定时任务crontab
  10. 【翻译转载】【官方教程】Asp.Net MVC4入门指南(3):添加一个视图