不知是哪道题(求助)
  • 板块题目总版
  • 楼主xzz_cat6
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/4/2 16:43
  • 上次更新2023/10/23 19:37:43
查看原帖
不知是哪道题(求助)
773813
xzz_cat6楼主2023/4/2 16:43

题目信息

//代码
#include<bits/stdc++.h>
using namespace std;

struct as{
	int st;
	int aa[2][4];
	int temp;
	int tem[31][2][4];
	vector<char> s; 
};
int a[2][4]={{1,2,3,4},{8,7,6,5}},arr[2][4],endd[2][4];
queue<as> q;
int judge(int (*aaa)[4],int (*endd)[4]){
	int t=1;
	for(int i=0;i<2;i++)
		for(int j=0;j<4;j++){
			if(aaa[i][j]!=endd[i][j]){
				t=0;
			}
		}
	return t;
}
int judge2(int (*aaa)[4],int (*tem)[2][4],int *temp){
	int tt=1,te=*temp;
	for(int k=0;k<te;k++){
		int t=1;
		for(int i=0;i<2;i++)
			for(int j=0;j<4;j++)
			{
				if(aaa[i][j]!=tem[k][i][j]){
					t=0;
				}
			}
		if(t==1)	tt=0;
	}
	return tt;
}
void bfs(){
	as no,ne;
	for(int i=0;i<2;i++)
		for(int j=0;j<4;j++)
			no.aa[i][j]=a[i][j];
	for(int i=0;i<2;i++)
		for(int j=0;j<4;j++)
		{
			no.tem[1][i][j]=a[i][j];
		}
	no.temp=1;
	no.st=0;
	q.push(no);
	
	while(!q.empty()){
		
		no=q.front();
		for(int i=0;i<2;i++)
			for(int j=0;j<4;j++)
				a[i][j]=no.aa[i][j];
		q.pop();
		if(judge(no.aa,endd)==1){
			printf("%d\n",no.st);
			for(int i=0;i<no.s.size();i++){
				int j;
				if(j==60){
					printf("\n");
					j=0;
				}
				printf("%c",no.s[i]);
				j++;
			}
			exit(0);
		}
		ne=no;
		for(int i=0;i<2;i++)
			for(int j=0;j<4;j++)
				arr[i][j]=a[i][j];
		for(int i=0;i<4;i++){
			int t=arr[0][i];
			arr[0][i]=arr[1][i];
			arr[1][i]=t;
		}
		for(int i=0;i<2;i++){
			for(int j=0;j<4;j++)
				{
					ne.aa[i][j]=arr[i][j];
				}
		}
		ne.s.push_back('A');
		ne.st=no.st+1;
		if(judge2(ne.aa,ne.tem,&ne.temp)==1)
		{
			
			ne.temp++;
			for(int i=0;i<2;i++)
				for(int j=0;j<4;j++){
					ne.tem[ne.temp][i][j]=ne.aa[i][j];
				}
				q.push(ne);
		}
		
		ne=no;
		for(int i=0;i<2;i++)
			for(int j=0;j<4;j++)
				arr[i][j]=a[i][j];
		for(int i=0;i<2;i++){
			int t=arr[i][3];
			for(int j=2;j>=0;j--){
				arr[i][j+1]=arr[i][j];
			}
			arr[i][0]=t;
		}
		for(int i=0;i<2;i++)
			for(int j=0;j<4;j++)
				ne.aa[i][j]=arr[i][j];
		ne.s.push_back('B');
		ne.st=no.st+1;
		if(judge2(ne.aa,ne.tem,&ne.temp)==1)
		{
			
			ne.temp++;
			for(int i=0;i<2;i++)
				for(int j=0;j<4;j++){
					ne.tem[ne.temp][i][j]=ne.aa[i][j];
				}
				q.push(ne);
		}
		
		ne=no;
		for(int i=0;i<2;i++)
			for(int j=0;j<4;j++)
				arr[i][j]=a[i][j];
		int t=arr[0][1];
		arr[0][1]=arr[1][1];
		int t2=arr[0][2];
		arr[0][2]=t;
		arr[1][1]=arr[1][2];
		arr[1][2]=t2;
		for(int i=0;i<2;i++)
			for(int j=0;j<4;j++)
				ne.aa[i][j]=arr[i][j];
		ne.s.push_back('C');
		ne.st=no.st+1;
		if(judge2(ne.aa,ne.tem,&ne.temp)==1)
		{
			ne.temp++;
			for(int i=0;i<2;i++)
				for(int j=0;j<4;j++){
					ne.tem[ne.temp][i][j]=ne.aa[i][j];
				}
				q.push(ne);
		}
	}
}


int main(){
	//freopen("dance.in","r",stdin);
	//freopen("dance.out","w",stdout);
		for(int j=0;j<4;j++)
			scanf("%d",&endd[0][j]) ;
		for(int j=3;j>=0;j--){
			scanf("%d",&endd[1][j]) ;
		}
	bfs();
} 
2023/4/2 16:43
加载中...