P2730魔板,写着写着就炸了,样例都没过
  • 板块灌水区
  • 楼主Lian_zy
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/28 15:53
  • 上次更新2024/3/28 19:19:04
查看原帖
P2730魔板,写着写着就炸了,样例都没过
923248
Lian_zy楼主2024/3/28 15:53

rt

#include <map>
#include <queue>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;

int c;
string s, u, v;
queue<string> q;
map<string, int> dis;
map<string, string> pre;
map<string, bool> vis;
string A(string s) {
	string k = "";
	k += s[4];
	k += s[5];
	k += s[6];
	k += s[7];
	k += s[0];
	k += s[1];
	k += s[2];
	k += s[3];
	return k;
}
string B(string s) {
	string k = "";
	k += s[3];
	k += s[0];
	k += s[1];
	k += s[2];
	k += s[7];
	k += s[4];
	k += s[5];
	k += s[6];
	return k; 
}
string C(string s) {
	string k = "";
	k += s[0];
	k += s[5];
	k += s[1];
	k += s[3];
	k += s[4];
	k += s[6];
	k += s[2];
	k += s[7];
	return k; 
}
void bfs(string st) {
	q.push(st);
	pre[st] = "";
	vis[st] = true;
	while (q.size()) {
		u = q.front();
		q.pop();
		v = A(u);
		if (vis[v] ^ 1) {
			pre[v] = pre[u] + 'A';
			vis[v] = true;
			dis[v] = dis[u] + 1;
			q.push(v);
		}
		v = B(u);
		if (vis[v] ^ 1) {
			pre[v] = pre[u] + 'B';
			vis[v] = true;
			dis[v] = dis[u] + 1;
			q.push(v);
		}
		v = C(u);
		if (vis[v] ^ 1) {
			pre[v] = pre[u] + 'C';
			vis[v] = true;
			dis[v] = dis[u] + 1;
			q.push(v);
		}
	}
	return ;
}
int main() {
	for (int i = 1; i <= 8; i++) {
		cin >> c;
		s += char(c + 48);
	}
	bfs("12345678");
	cout << dis[s] << endl << pre[s] << endl;
	return 0;
} 
2024/3/28 15:53
加载中...