原题链接:蓝桥杯2017年第八届真题-青蛙跳杯子
暴力广搜,已经不想写哈希了,懒人 map ,虽然慢一点。
参考代码:
#include<bits/stdc++.h>
#define Inf 0x3F3F3F3F
#define Loc freopen("baka.in", "r", stdin)
typedef long long LL;
using namespace std;
string init, aim;
map<string, bool> Vis;
void BFS() {
queue<pair<string, int> > que; que.push(make_pair(init, 0)); Vis[init] = true;
while (!que.empty()) {
pair<string, int> Tmp = que.front(); Tmp.second++; que.pop();
int Len = Tmp.first.size();
for (int pos = 0; pos < Len; pos++)
if (Tmp.first[pos] == '*') {
pair<string, int> now = Tmp;
for (int D = 1; D <= 3; D++) {
if (pos + D >= 0 && pos + D < Len && now.first[pos + D] != '*') {
swap(now.first[pos], now.first[pos + D]);
if (now.first == aim) {
cout << now.second << endl; return;
}
if (!Vis[now.first]) {
Vis[now.first] = true; que.push(now);
}
swap(now.first[pos], now.first[pos + D]);
}
if (pos - D >= 0 && pos - D < Len && now.first[pos - D] != '*') {
swap(now.first[pos], now.first[pos - D]);
if (now.first == aim) {
cout << now.second << endl; return;
}
if (!Vis[now.first]) {
Vis[now.first] = true; que.push(now);
}
swap(now.first[pos], now.first[pos - D]);
}
}
}
}
}
int main() {
cin >> init >> aim;
BFS();
}0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复