六数码问题

这是一个关于解决六数码问题的数学挑战,通过α和β两种特定变换,尝试将初始数字布局转换成目标布局。文章包含输入输出样例及转换次数的要求。

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

描述
现有一两行三列的表格如下:
A B C
D E F
把 1、2、3、4、5、6 六个数字分别填入 A、B、C、D、E、F 格子中,每个格子一
个数字且各不相同。每种不同的填法称为一种布局。如下
1 3 5
2 4 6
布局 1
2 5 6
4 3 1
布局 2
定义 α 变换如下:把 A 格中的数字放入 B 格,把 B 格中的数字放入 E 格,把 E
格中的数字放入 D 格,把 D 格中的数字放入 A 格。
定义 β 变换如下:把 B 格中的数字放入 C 格,把 C 格中的数字放入 F 格,把 F
格中的数字放入 E 格,把 E 格中的数字放入 B 格。
问:对于给定的布局,可否通过有限次的α 变换和β 变换变成下面的目标布局:
1 2 3
4 5 6
输入
本题有多个测例,第一行为输入测例的个数 n,下面是 n 行测例,每个测例的输
入是 1 到 6 这六个数字的一个排列,空格隔开,表示初始布局 ABCDEF 格中依次
填入的数字。
输出
每个输出占一行。输出转换到目标格局需要变换的最少次数。(若不能转换则输
出-1)
输入样例
2
2 5 3 1 4 6
2 3 6 1 5 4
输出样例
1
2
提示
注意不能转换到目标格局的情况应输出-1;
输出格式为:printf(“%d\n”,min);

#include <cstdio>
#include <queue>
using namespace std;
const int maxn = 50;
int n;//有几个输入
int ans[maxn] = {0};//保存最终数据的次数
int used[654322] = {0};//判重数组
struct node
{
	int table[6];
	int num;
	int sum = 0;
}Node;
queue<node> q;

int setnum(node temp)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值