密码锁 - 问题 - USCOJ (大家加油哦!)

题目:

你获得了一个据说是古代玛雅人制作的箱子。你非常想打开箱子看看里面有什么东西,但是不幸的是,正如所有故事里一样,神秘的箱子出现的时候总是会挂着神秘的锁。
  这个锁上面看起来有 N 个数字,它们排成一排,并且每个数字都在 0 到 2 之间。你发现你可以通过锁上的机关来交换相邻两个数字的顺序。比如,如果原来有 5 个数字 02120,在一次交换以后你就可以得到 20120,01220,02210 或者 02102。
  根据你所搜集的情报,这个锁在上面存在某连续四个数字是“2012”的时候会自动打开。现在,你需要计算一下,你至少需要进行多少次交换操作才能打开这把锁?

输入描述:
  输入数据的第一行有一个正整数 N。(4 ≤ N ≤ 13) 输入数据的第二行有 N 个数字 a1,a2, ..., aN ,其中 ai 表示这个锁上面第 i 个数字的值,满足 0 ≤ ai ≤ 2。这些数字之间没有空格分隔

输出描述:
  你只需要输出一个数字,即你至少需要的交换次数。如果无论如何都没有希望打开这把锁,输出 -1。

输入样例:
5
02120
输出样例:
1

#include<bits/stdc++.h>
using namespace std;
#define pb push_back
string s;
int ans=-1,len;
struct node{string a;int step;node(string na,int ns){a=na; step=ns;}
};
deque<node> v;
map<string,bool> mp; //用map记录已经搜索过的组合int main(){cin >> len;cin >> s;v.pb(node(s,0));mp[s]=1;while(!v.empty()){ //BFSnode nv=v.front();v.erase(v.begin());if(nv.a.find("2012")!=-1) {ans=nv.step; break;}for(int i=0;i<len-1;i++){string sa=nv.a;swap(sa[i],sa[i+1]);if(mp[sa]==0 && sa[i]!=sa[i+1]){mp[sa]=1;v.pb(node(sa,nv.step+1));}}}cout << ans;return 0;
}

练习22,密码锁【广搜BFS】相关推荐

  1. hdu-2612-Find a way(广搜,bfs)

    Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Ningbo one year ...

  2. 深搜DFS\广搜BFS 图初步入门

    首先,不管是BFS还是DFS,由于时间和空间的局限性,它们只能解决数据量比较小的问题. 深搜,顾名思义,它从某个状态开始,不断的转移状态,直到无法转移,然后退回到上一步的状态,继续转移到其他状态,不断 ...

  3. 算法学习笔记(六) 二叉树和图遍历—深搜 DFS 与广搜 BFS

    图的深搜与广搜 复习下二叉树.图的深搜与广搜. 从图的遍历说起.图的遍历方法有两种:深度优先遍历(Depth First Search), 广度优先遍历(Breadth First Search),其 ...

  4. POJ 3126 Prime Path 简单广搜(BFS)

    题意:一个四位数的质数,每次只能变换一个数字,而且变换后的数也要为质数.给出两个四位数的质数,输出第一个数变换为第二个数的最少步骤. 利用广搜就能很快解决问题了.还有一个要注意的地方,千位要大于0.例 ...

  5. 算法——广搜(BFS)/深搜(DFS)

        在图的基本算法中,最初接触的就是图的遍历算法,根据访问节点的顺序,可分为广度优先搜索(BFS)和深度优先搜索(DFS). 广度优先搜索 广度优先搜索算法主要解决两个问题: 从节点A出发有到节点 ...

  6. NYOJ999 师傅又被妖怪抓走了(预处理+状态压缩+广搜BFS)

    题目: 师傅又被妖怪抓走了 时间限制: 1000 ms  |  内存限制: 65535 KB 难度: 3 描述 话说唐僧复得了孙行者,师徒们一心同体,共诣西方.自宝象国救了公主,承君臣送出城西,沿路饥 ...

  7. nyist 999 师傅又被妖怪抓走了 【双广搜 || BFS +状态压缩】

    题目:nyist 999 师傅又被妖怪抓走了 分析:在一个图中只要看到D点和E点就行的最小步数,看到的定义是:也就是说两个人在同一行或者同一列,并且中间没有障碍物或者没有其他人就可以看到对方. 所以可 ...

  8. 【C++天梯计划】1.13 广搜(BFS)(search widely)

    文章目录 什么是广搜? 与深搜的对比 实际应用 例题1:快乐的马里奥 题目描述 输入 输出 样例 代码1 代码2 例题2:迷宫出口 题目描述 输入 输出 样例 思路 代码

  9. HDU ACM 1728 逃离迷宫 (广搜BFS)

    http://acm.hdu.edu.cn/showproblem.php?pid=1728 题意:给出一张图,转弯数k,起点(x1,y1),(x2,y2)判断能不能最多只转k个弯时从起点走到终点 输 ...

最新文章

  1. 《机器学习实战》-线性回归
  2. 集合初始化时,指定集合初始值大小
  3. Linux下的TCP/IP编程----IO复用及IO复用服务端
  4. 一个震撼的交互型3D可视化R包 - 可直接转ggplot2图为3D
  5. 大手笔!EDG夺冠TCL奖励300万,还送全系AI家电一套
  6. tracker服务器php,FastDFS-5.05 tracker服务器安装nginx+php
  7. leetcode python3 简单题231. Power of Two
  8. vs2013 也能重构(refactor )变量名了
  9. 物流管理系统c语言程序设计,C语言程序设计物流管理系统.doc
  10. wamp切换mysql版本_wampserver多版本php切换失败
  11. 如何免费下载百度指数数据
  12. 基于 BK 树的中文拼写纠错候选召回
  13. 感冒发烧不宜吃的食物与可以吃的食物
  14. 浅谈 Facade 模式
  15. 程序员小灰——谷歌面试题之高楼扔鸡蛋问题
  16. 金融专业术语之——期限错配
  17. 高代|共轭矩阵 自共轭矩阵
  18. java下载附件给(pdf、pptx、word、excel、图片)添加水印
  19. BOLT:弥合自动调优和硬件原生性能之间的差距
  20. VirtualBox“切换到无缝模式”和“自动调整显示尺寸”菜单无法使能

热门文章

  1. js如何打开本地html文件,html、js获取本地文件夹路径,打开本地应用程序
  2. 蛮力法的相关问题总结
  3. TF卡里删掉文件后内存没变大_不用第三方,手机自带软件也能清扫内存!教你4个清理技巧...
  4. Java freemarker 生成word文档
  5. Python小知识:推导式用法大全,Comprehension
  6. 2020-05-21
  7. miui9支持android,基于Android Q的MIUI来了 小米9尝鲜
  8. openjdk windows版本下载地址
  9. JavaScript 的防抖与节流
  10. FileNotFoundError: Could not find module xxx libbanded5x.UGR6EUQPIWHQH7SL62IWIXB5545VDNQZ.gfortran-w