UVa 253 Cube painting

本文介绍了一种独特的算法来判断两个立方体表面颜色布局是否可通过旋转匹配。通过将立方体表面分为相对的顶点组并逐一比较,该算法提供了一种新颖的解决方案。代码示例展示了具体的实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正常思路应该是列举所有的旋转情况再做判断

我的思路比较清奇。。。因为16,25,34相对,就像先把串分成两组,表示相对的2个顶点,将一个角与前面一一对应后再比较对面是否一样。

写起来也比较长??

//Cube painting 
#include<iostream>
char a[7], b[7];
int compare(int i, int j, int k);
int check(int i, int j, int k);
int p[4];
using namespace std;
int compare(int i, int j, int k)
{
	p[4] = {};
	if (a[1] == b[i])
	{
		p[i] = i;
		if (a[2] == b[j]) 
		{
			p[2] = j;
			if (a[3] == b[k])p[3] = k;
		}
		else if (a[2] == b[k])
		{
			p[2] = k;
			if (a[3] == b[j])p[3] = j;
		}
	}
	else if (a[1] == b[j])
	{
		p[1] = j;
		if (a[2] == b[i])
		{
			p[2] = i;
			if (a[3] == b[k])p[3] = k;
		}
		else if (a[2] == b[k])
		{
			p[2] = k;
			if (a[3] == b[i])p[3] = i;
		}
	}
	else if (a[1] == b[k])
	{
		p[1] = k;
		if (a[2] == b[i])
		{
			p[2] = i;
			if (a[3] == b[j])p[3] = j;
		}
		else if (a[2] == b[j])
		{
			p[2] = j;
			if (a[3] == b[i])p[3] = i;
		}
	}
	if (p[1] && p[2] && p[3])return 1;
	else return 0;
}
int check(int i, int j, int k)
{
	int out = 1;
	if (a[6] != b[7 - i])out = 0;
	else if (a[5] != b[7 - j])out = 0;
	else if (a[4] != b[7 - k])out = 0;
	return out;
}
int main()
{

		for (int i = 1; i < 7; i++)cin >> a[i];
		for (int i = 1; i < 7; i++)cin >> b[i];
		int ans = 0;
		if (compare(1, 2, 3)) ans += check(p[1], p[2], p[3]);
		else if (compare(1, 2, 3)) ans += check(p[1], p[2], p[3]);
		else if (compare(6, 2, 3)) ans += check(p[1], p[2], p[3]);
		else if (compare(1, 5, 3)) ans += check(p[1], p[2], p[3]);
		else if (compare(1, 2, 4)) ans += check(p[1], p[2], p[3]);
		else if (compare(6, 5, 3)) ans += check(p[1], p[2], p[3]);
		else if (compare(1, 5, 4)) ans += check(p[1], p[2], p[3]);
		else if (compare(6, 2, 4)) ans += check(p[1], p[2], p[3]);
		else if (compare(6, 5, 4)) ans += check(p[1], p[2], p[3]);
		if (ans)cout << "TRUE";
		else cout << "FALSE";
}



学习一下别人的代码。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值