机试题-玛雅人的密码

题目:

题目描述

玛雅人有一种密码,如果字符串中出现连续的2012四个数字就能解开密码。给一个长度为N的字符串,(2=输入描述:
输入包含多组测试数据,每组测试数据由两行组成。
第一行为一个整数N,代表字符串的长度(2<=N<=13)。
第二行为一个仅由0、1、2组成的,长度为N的字符串。

输出描述:

对于每组测试数据,若可以解出密码,输出最少的移位次数;否则输出-1。
示例1

输入

复制
5
02120

输出

复制
1

代码:

#include 
#include 
#include 
#include 
#include 
using namespace std;
map M;//M[str]表示str经历的交换次数
queue Q;//队列,用于bfsstring Swap(string str, int i)
{//将字符串i位与i+1位交换string newStr=str;char tmp=newStr[i];newStr[i]=newStr[i+1];newStr[i+1]=tmp;return newStr;
}bool Judge(string str)
{//判断字符串中是否含有"2012"if(str.find("2012", 0)==string::npos) return false;else return true;
}int BFS(string str)
{//广度优先搜索string newStr;M.clear();//清空mapwhile(!Q.empty()) Q.pop();//清空队列Q.push(str);//初始字符串作为起点放入队列M[str]=0;//初始字符串经历的交换次数是0while(!Q.empty()){str=Q.front();Q.pop();//取出队首,存入strfor(unsigned i=0; i>str;//读取字符串(前面读取n好像没啥用)if(Judge(str)==true) printf("0\n");//一开始就符合要求的话else//初始字符串不符合要求,那就bfs{int ans=BFS(str);printf("%d\n", ans);}}return 0;//大功告成
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部