HzuWHF


私信TA

用户名:I7I08I9047

访问量:83359

签 名:

我RUN了

等  级
排  名 19
经  验 21266
参赛次数 13
文章发表 127
年  龄 3
在职情况 学生
学  校 贺州学院
专  业

  自我简介:

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

  评论区

  • «
  • »