暴力广搜,已经不想写哈希了,懒人 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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论