题解 | #玛雅人的密码#

玛雅人的密码

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);

	}

}

全部评论

相关推荐

寿命齿轮:实习就一段还拉了,项目一看就不是手搓,学历也拉了,技术栈看着倒是挺好,就是不知道面试表现能咋样。 不过现在才大三,争取搞两端大厂实习,或者一个纯个人项目+一段大厂,感觉秋招还是未来可期。
投递美团等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务