练习22,密码锁【广搜BFS】
密码锁 - 问题 - 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】相关推荐
- hdu-2612-Find a way(广搜,bfs)
Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Ningbo one year ...
- 深搜DFS\广搜BFS 图初步入门
首先,不管是BFS还是DFS,由于时间和空间的局限性,它们只能解决数据量比较小的问题. 深搜,顾名思义,它从某个状态开始,不断的转移状态,直到无法转移,然后退回到上一步的状态,继续转移到其他状态,不断 ...
- 算法学习笔记(六) 二叉树和图遍历—深搜 DFS 与广搜 BFS
图的深搜与广搜 复习下二叉树.图的深搜与广搜. 从图的遍历说起.图的遍历方法有两种:深度优先遍历(Depth First Search), 广度优先遍历(Breadth First Search),其 ...
- POJ 3126 Prime Path 简单广搜(BFS)
题意:一个四位数的质数,每次只能变换一个数字,而且变换后的数也要为质数.给出两个四位数的质数,输出第一个数变换为第二个数的最少步骤. 利用广搜就能很快解决问题了.还有一个要注意的地方,千位要大于0.例 ...
- 算法——广搜(BFS)/深搜(DFS)
在图的基本算法中,最初接触的就是图的遍历算法,根据访问节点的顺序,可分为广度优先搜索(BFS)和深度优先搜索(DFS). 广度优先搜索 广度优先搜索算法主要解决两个问题: 从节点A出发有到节点 ...
- NYOJ999 师傅又被妖怪抓走了(预处理+状态压缩+广搜BFS)
题目: 师傅又被妖怪抓走了 时间限制: 1000 ms | 内存限制: 65535 KB 难度: 3 描述 话说唐僧复得了孙行者,师徒们一心同体,共诣西方.自宝象国救了公主,承君臣送出城西,沿路饥 ...
- nyist 999 师傅又被妖怪抓走了 【双广搜 || BFS +状态压缩】
题目:nyist 999 师傅又被妖怪抓走了 分析:在一个图中只要看到D点和E点就行的最小步数,看到的定义是:也就是说两个人在同一行或者同一列,并且中间没有障碍物或者没有其他人就可以看到对方. 所以可 ...
- 【C++天梯计划】1.13 广搜(BFS)(search widely)
文章目录 什么是广搜? 与深搜的对比 实际应用 例题1:快乐的马里奥 题目描述 输入 输出 样例 代码1 代码2 例题2:迷宫出口 题目描述 输入 输出 样例 思路 代码
- HDU ACM 1728 逃离迷宫 (广搜BFS)
http://acm.hdu.edu.cn/showproblem.php?pid=1728 题意:给出一张图,转弯数k,起点(x1,y1),(x2,y2)判断能不能最多只转k个弯时从起点走到终点 输 ...
最新文章
- 《机器学习实战》-线性回归
- 集合初始化时,指定集合初始值大小
- Linux下的TCP/IP编程----IO复用及IO复用服务端
- 一个震撼的交互型3D可视化R包 - 可直接转ggplot2图为3D
- 大手笔!EDG夺冠TCL奖励300万,还送全系AI家电一套
- tracker服务器php,FastDFS-5.05 tracker服务器安装nginx+php
- leetcode python3 简单题231. Power of Two
- vs2013 也能重构(refactor )变量名了
- 物流管理系统c语言程序设计,C语言程序设计物流管理系统.doc
- wamp切换mysql版本_wampserver多版本php切换失败
- 如何免费下载百度指数数据
- 基于 BK 树的中文拼写纠错候选召回
- 感冒发烧不宜吃的食物与可以吃的食物
- 浅谈 Facade 模式
- 程序员小灰——谷歌面试题之高楼扔鸡蛋问题
- 金融专业术语之——期限错配
- 高代|共轭矩阵 自共轭矩阵
- java下载附件给(pdf、pptx、word、excel、图片)添加水印
- BOLT:弥合自动调优和硬件原生性能之间的差距
- VirtualBox“切换到无缝模式”和“自动调整显示尺寸”菜单无法使能
热门文章
- js如何打开本地html文件,html、js获取本地文件夹路径,打开本地应用程序
- 蛮力法的相关问题总结
- TF卡里删掉文件后内存没变大_不用第三方,手机自带软件也能清扫内存!教你4个清理技巧...
- Java freemarker 生成word文档
- Python小知识:推导式用法大全,Comprehension
- 2020-05-21
- miui9支持android,基于Android Q的MIUI来了 小米9尝鲜
- openjdk windows版本下载地址
- JavaScript 的防抖与节流
- FileNotFoundError: Could not find module xxx libbanded5x.UGR6EUQPIWHQH7SL62IWIXB5545VDNQZ.gfortran-w