题解 | #玛雅人的密码#

玛雅人的密码

https://www.nowcoder.com/practice/761fc1e2f03742c2aa929c19ba96dbb0

利用map来实现对以访问字符串的标记
#include<iostream>
#include<map>
#include<queue>
using namespace std;

struct miya {
	string str;
	int num;
};


void BFS(string str) {

	map<string, bool> isvisited;  //保存以及访问过的结点
	queue<miya> myqueue;
	miya prime;
	prime.num = 0; prime.str = str;

	myqueue.push(prime);  //初始结点入栈
	isvisited[prime.str] = true;

	while (!myqueue.empty()) {
		miya cur = myqueue.front();
		myqueue.pop();  //弹出队首元素
		if (cur.str.find("2012") != string::npos) {
			cout << cur.num << endl;
			return;
		}
		for (int i = 1; i < cur.str.size(); i++) {
			char temp;
			miya neighber = cur;
			temp = neighber.str[i];
			neighber.str[i] = neighber.str[i - 1];
			neighber.str[i - 1] = temp;   //完成字符位移
			neighber.num++;

			if (isvisited.find(neighber.str) == isvisited.end())
			{
				isvisited[neighber.str] = true;
				myqueue.push(neighber);  //将未访问结点入栈
			}
			else continue;
		}
	}

}

int main()
{
	//使用广度优先搜索来实现
	int n;
	string str;
	
	while (cin >> n) {
		cin >> str;
		BFS(str);

	}

}

全部评论

相关推荐

牛客279957775号:铁暗恋
点赞 评论 收藏
分享
11-04 14:10
东南大学 Java
_可乐多加冰_:去市公司包卖卡的
点赞 评论 收藏
分享
昨天 17:22
已编辑
西安交通大学 Java
华为 昇腾 ai软件开发 薪资20k x (14-16),职级13A,5%公积金,c/cpp
BLOOMING7:闭眼滴滴,华子给的又少又累
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务