37ptsWA求调教
查看原帖
37ptsWA求调教
1040409
dhpzy楼主2025/8/5 11:44
#include<bits/stdc++.h>
using namespace std;
struct node{
	int a[10][10],t;
	string ans;
}a;
map<int,bool>m;
queue<node>q;
int cale(node x)
{
	int ans=0;
	for(int i=1;i<=4;i++) ans=ans*10+x.a[1][i];
	for(int i=4;i;i--) ans=ans*10+x.a[2][i];
	return ans;
}
int main()
{
	int g=0;
	for(int i=1;i<=4;i++) a.a[1][i]=i;
	for(int i=4;i;i--) a.a[2][i]=4+(4-i+1);
	for(int i=1;i<=8;i++)
	{
		int x;
		cin>>x;
		g=g*10+x;
	 } 
	if(g==12345678)
	{
		cout<<0<<'\n';
		return 0;
	}
	a.ans="";a.t=0;
	q.push(a);
	m[12345678]=1;
	while(q.size())
	{
		int f=0;
		node x=q.front();
		q.pop();
		node y=x;
		//A
		for(int i=1;i<=4;i++) swap(y.a[1][i],y.a[2][i]);
		f=cale(y); 
	//	cout<<f<<' ';
		if(m[f]) continue;
		y.ans+='A';
		y.t++;
		if(f==g)
		{
	//		cout<<f<<' ';
			cout<<y.t<<'\n';
			cout<<y.ans;
			return 0;
		}
		m[f]=1;
		q.push(y);
		y=x;
		//B
		int a1=y.a[1][4],a2=y.a[2][4];
		for(int i=4;i>1;i--) y.a[1][i]=y.a[1][i-1],y.a[2][i]=y.a[2][i-1];
		y.a[1][1]=a1,y.a[2][1]=a2;
		f=cale(y);//cout<<f<<' ';
		if(m[f]) continue;
		y.ans+='B';
		y.t++;
		if(f==g)
		{
			cout<<y.t<<'\n';
			cout<<y.ans;
			return 0;
		}
		m[f]=1;
		q.push(y);
		y=x;
		//C
		a1=y.a[1][2];
		y.a[1][2]=y.a[2][2];y.a[2][2]=y.a[2][3];y.a[2][3]=y.a[1][3];
		y.a[1][3]=a1;
		f=cale(y);//cout<<f<<' ';
		if(m[f]) continue;
		y.ans+='C';
		y.t++;
		if(f==g)
		{
			cout<<y.t<<'\n';
			cout<<y.ans;
			return 0;
		}
		m[f]=1;
		q.push(y);
	}
}
2025/8/5 11:44
加载中...