社区讨论

80分求条

P2630图像变换参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mdj5ceqs
此快照首次捕获于
2025/07/26 02:20
7 个月前
此快照最后确认于
2025/11/04 03:43
4 个月前
查看原帖
dework其实就是work的反操作,回溯用的
CPP
#include<bits/stdc++.h>
using namespace std;
int a[10][10];
int b[10][10];
string res="ZZZZ";
void work(int op)
{
	int c[10][10];
	if(op==1)
	{
		for(int i=1; i<=3; i++)
		{
			for(int j=1; j<=3; j++)
			{
				c[j][3-i+1]=a[i][j];
			}
		}
	}
	if(op==2)
	{
		for(int i=1; i<=3; i++)
		{
			for(int j=1; j<=3; j++)
			{
				c[3-j+1][i]=a[i][j];
			}
		}
	}
	if(op==3)
	{
		for(int i=1; i<=3; i++)
		{
			for(int j=1; j<=3; j++)
			{
				c[i][j]=a[i][3-j+1];
			}
		}
	}
	if(op==4)
	{
		for(int i=1; i<=3; i++)
		{
			for(int j=1; j<=3; j++)
			{
				c[i][j]=a[3-i+1][j];
			}
		}
	}
	for(int i=1; i<=3; i++)
	{
		for(int j=1; j<=3; j++)
		{
			a[i][j]=c[i][j];
		}
	}
	return ;
}

void dework(int op)
{
	int c[10][10];
	if(op==2)
	{
		for(int i=1; i<=3; i++)
		{
			for(int j=1; j<=3; j++)
			{
				c[j][3-i+1]=a[i][j];
			}
		}
	}
	if(op==1)
	{
		for(int i=1; i<=3; i++)
		{
			for(int j=1; j<=3; j++)
			{
				c[3-j+1][i]=a[i][j];
			}
		}
	}
	if(op==4)
	{
		for(int i=1; i<=3; i++)
		{
			for(int j=1; j<=3; j++)
			{
				c[i][j]=a[3-i+1][j];
			}
		}
	}
	if(op==3)
	{
		for(int i=1; i<=3; i++)
		{
			for(int j=1; j<=3; j++)
			{
				c[i][j]=a[i][3-j+1];
			}
		}
	}
	for(int i=1; i<=3; i++)
	{
		for(int j=1; j<=3; j++)
		{
			a[i][j]=c[i][j];
		}
	}
	return ;
}
bool ck()
{
	for(int i=1; i<=3; i++)
	{
		for(int j=1; j<=3; j++)
		{
			if(a[i][j]!=b[i][j])
			{
				return 0;
			}
		}
	}
	return 1;
}
void dfs(int dep,string ans)
{
	if(ck())
	{
		if(ans.size()<res.size())
		{
			res=ans;
		}
		else
		{
			if(ans<res)
			{
				res=ans;
			}
		}
		return ;
	}
	if(dep==5)
	{
		return ;
	}
	for(int i=1; i<=4; i++)
	{
		work(i);
		dfs(dep+1,ans+(char(i+'A'-1)));
		dework(i);
	}
	return ;
}
int main()
{
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	for(int i=1; i<=3; i++)
	{
		for(int j=1; j<=3; j++)
		{
			cin>>a[i][j];
		}
	}
	for(int i=1; i<=3; i++)
	{
		for(int j=1; j<=3; j++)
		{
			cin>>b[i][j];
		}
	}
	dfs(1,"");
	if(res!="ZZZZ")
	{
		cout<<res;
	}
	else
	{
		cout<<"Poland cannot into space!!!";
	}
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...