22求调
查看原帖
22求调
1272259
cgxd楼主2024/5/25 17:14
#include<bits/stdc++.h>
using namespace std;
vector<int> turn(vector<int> v, int k, ...){
	va_list valist;
	va_start(valist, k);
	while(k--){
		int n = va_arg(valist, int);
		v[n] += 3;
		if(v[n] > 12)
			v[n] -= 12;
		if(v[n] == 0)
			v[n] = 12;
	}va_end(valist);
	return v;
}bool check(vector<int> v){
	for(int i: v){
		if(i != 12)
			return 0;
	}return 1;
}void operator>>(istream &is, vector<int> &v){
	for(int i = 0; i < 9; ++i){
		int k;
		cin >> k;
		v.push_back(k);
	}
}void operator<<(ostream &os, vector<int> &v){
	for(int i: v)
		cout << i << ' ';
}bool operator<(vector<int> v1, vector<int> v2){
	return v1[0] < v2[0];
}vector<int> operator+(vector<int> v, int k){
	v.push_back(k);
	return v;
}vector<int> v;
deque<pair<vector<int>, vector<int>>> dq;
set<vector<int>> s;
int main(){
	cin >> v;
	dq.push_back(pair<vector<int>, vector<int>>(v, vector<int>()));
	while(dq.size()){
		pair<vector<int>, vector<int>> p(dq[0]);
		vector<int> v1;
		for(int i = 1; i <= 9; ++i){
			switch(i){
				case 1:{
					v1 = turn(p.first, 4, 0, 1, 2, 3);
					break;
				}case 2:{
					v1 = turn(p.first, 3, 0, 1, 2);
					break;
				}case 3:{
					v1 = turn(p.first, 4, 1, 2, 4, 5);
					break;
				}case 4:{
					v1 = turn(p.first, 3, 0, 3, 6);
					break;
				}case 5:{
					v1 = turn(p.first, 5, 1, 3, 4, 5, 7);
					break;
				}case 6:{
					v1 = turn(p.first, 3, 2, 5, 8);
					break;
				}case 7:{
					v1 = turn(p.first, 4, 3, 4, 5, 6);
					break;
				}case 8:{
					v1 = turn(p.first, 3, 6, 7, 8);
					break;
				}case 9:{
					v1 = turn(p.first, 4, 4, 5, 7, 8);
					break;
				}
			}vector<int> v2 = p.second + i;
			if(s.count(v1))
				continue;
			s.insert(v1);
			dq.push_back(pair<vector<int>, vector<int>>(v1, v2));
			if(check(v1)){
				cout << v2;
				return 0;
			}
		}
		dq.pop_front();
	}return 0;
}
2024/5/25 17:14
加载中...