广搜48分后4个点TLE,求神犇
查看原帖
广搜48分后4个点TLE,求神犇
705296
miffy_123楼主2023/1/27 13:31

思路:广搜,用map去重 程序:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define per(i,o,p) for(int (i)=(o);(i)>=(p);(i)--)
#define rep(i,o,p) for(int (i)=(o);(i)<(p);(i)++)
int read(){
	int f=1,k=0;
	char c;
	c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-'){
			f=-1;
		}
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		k=(k<<1)+(k<<3)+(c^48);
		c=getchar();
	}
	return f*k;
}
void write(int x){
	if(x<0){
		putchar('-');
		x=-x;
	}
	if(x>9){
		write(x/10);
	}
	putchar(x%10+'0');
}
void pl(){putchar('\n');}
vector<int> SWap(vector<int>v,int a,int b){
	int temp=v[a];
	v[a]=v[b];
	v[b]=temp;
	return v;
}
vector<int> A(vector<int>v){
	v=SWap(v,0,7);
	v=SWap(v,1,6);
	v=SWap(v,2,5);
	v=SWap(v,3,4);
	return v;
} 
vector<int> B(vector<int>v){
	int temp=v[3];
	v[3]=v[2];
	v[2]=v[1];
	v[1]=v[0];
	v[0]=temp;
	temp=v[4];
	v[4]=v[5];
	v[5]=v[6];
	v[6]=v[7];
	v[7]=temp;
	return v;
}
vector<int> C(vector<int>v){
	int temp=v[1];
	v[1]=v[6];
	int tem2=temp;
	temp=v[2];
	v[2]=tem2;
	tem2=temp;
	temp=v[5];
	v[5]=tem2;
	v[6]=temp;
	return v;
}
vector<int>obj;
map<string,bool>pm;
map<string,vector<int> >mp;
string bfs(){
	queue<string>q;
	vector<int>v;
	mp.clear();
	pm.clear();
	q.push("");
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.push_back(5);
	v.push_back(6);
	v.push_back(7);
	v.push_back(8);
	mp[""]=v;
	while(true){
		if(q.empty()){
			return "-1";
		}
		string F=q.front();
		if(pm[F]==true){
			continue;
		}
		if(mp[F]==obj){
			write(F.length());
			pl();
			return F;
		}
		string f=F+'A';
		q.push(f);
		mp[f]=A(mp[F]);
		f=F+'B';
		q.push(f);
		mp[f]=B(mp[F]);
		f=F+'C';
		q.push(f);
		mp[f]=C(mp[F]);
		pm[F]=true;
		q.pop();
	}
}
int main(){
    for(int i=0;i<8;i++)obj.push_back(read());
	string s=bfs();
	s='.'+s;
	for(int i=1;i<s.length();i++){
		putchar(s[i]);
		if(i%60==0){
			pl();
		}
	}
    return 0;
}
2023/1/27 13:31
加载中...