求条玄关
查看原帖
求条玄关
1145476
Axolotl_awa楼主2024/9/6 22:18
#include <iostream>
#include <queue>
#include <cstdio>
#include <string>
#include <vector>
 
using namespace std;
 
string s;
vector<string> v;
 
bool check (string str) {
	for (int i = 0; i < 101; i ++) {
		if (v[i] == str) {
			return false;
		}
	}
 
	return true;
}
 
struct Node {
	string value;
	string ans;
	int data;
};

int main () {


	for (int i = 0; i < 8; i ++) {
		cin >> s[i];
	}
 
	queue<Node> q;
	v.push_back("12348765");
 
	q.push({"12348765", "", 0});
 
	while (!q.empty()) {
        Node p = q.front();
        q.pop();
		for (int j = 1; j <= 3; j ++) {
			Node new_p = p;
			new_p.ans = p.ans;
 
			// A
			if (j == 1) {
				for (int i = 0; i < 4; i ++) {
					swap(new_p.value[i], new_p.value[i + 4]);
				}
 
				new_p.ans += 'A';
			}
 
			// B
			if (j == 2) {
				char c[2] = {new_p.value[3], new_p.value[7]};
 
				for (int i = 3; i >= 0; i --) {
					new_p.value[i] = new_p.value[i - 1];
					new_p.value[i + 4] = new_p.value[i + 3];
				}
 
				new_p.value[0] = c[0];
				new_p.value[4] = c[1];
				new_p.ans += 'B';
                
			}
 
			// C
			if (j == 3) {
				char c = new_p.value[6];
				new_p.value[6] = new_p.value[2];
				new_p.value[2] = new_p.value[1];
				new_p.value[1] = new_p.value[5];
				new_p.value[5] = c;
				new_p.ans += 'C';
			}

            // cout << new_p.ans[new_p.ans.size() - 1] << ": ";
            // for (int i = 0; i < 8; i ++) {
            //     cout << new_p.value[i];
            //     if (i == 3) {
            //         cout << endl;
            //     }
            //     else {
            //         cout << " ";
            //     }
            // }
            // cout << new_p.ans << endl;

			if (check(new_p.value)) {
				if (new_p.value == s) {
					cout << new_p.ans.size() << endl;
					cout << new_p.ans;
					return 0;
				}

				new_p.data = p.data + 1;
				q.push(new_p);
				v.push_back(new_p.value);
			}
		}
	}
	return 0;
}
2024/9/6 22:18
加载中...