2020.12.28暴力三阶幻方

该博客介绍了如何使用暴力枚举方法解决三阶幻方的还原问题。给定一个可能部分缺失的三阶幻方矩阵,程序通过尝试所有可能的旋转和镜像操作来寻找唯一解。如果找到唯一解,则输出,否则输出'TooMany'。示例输入和输出展示了具体的操作过程。

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

2020.12.28暴力三阶幻方

题目描述

三阶幻方又被称作九宫格(对角线、横、竖和都为15,中间数为5)

4 9 2
3 5 7
8 1 6

所有的三阶幻方,都可以通过这样一个九宫格进行若干镜像和旋转操作之后得到。现在小明准备将一个三阶幻方(不一定是上图中的那个)中的一些数抹掉,你呢,需要写一个程序

输入格式

输入仅包含单组测试数据。

每组测试数据为一个3*3的矩阵,其中为0的部分表示被小明抹去的部分。

对于100%的数据,满足给出的矩阵至少能还原出一组可行的三阶幻方。

输出格式

如果仅能还原出一组可行的三阶幻方,则将其输出,否则输出“Too Many”(不包含引号)。

样例输入

0 7 2
0 5 0
0 3 0

样例输出

6 7 2
1 5 9
8 3 4

数据规模和约定

思路

由于三阶幻方较少,且每个三阶幻方占用内存小,可以穷举,再暴力枚举。

代码

	int A[][]={
			{6,7,2,1,5,9,8,3,4},
			{8,3,4,1,5,9,6,7,2},
			{2,9,4,7,5,3,6,1,8},
			{6,1,8,7,5,3,2,9,4},
			{2,7,6,9,5,1,4,3,8},
			{4,3,8,9,5,1,2,7,6},
			{4,9,2,3,5,7,8,1,6},
			{8,1,6,3,5,7,4,9,2},
	};
	void test() {
		int[] a = new int[9];
		Scanner inp = new Scanner(System.in);
		for(int i = 0; i < 9; i++) 
				a[i] = inp.nextInt();
		int[] y = {};
		int s = 0;
		for(int i = 0; i < 8; i++) {
			boolean flag = true;
			for(int j = 0; j < 9; j++) {
				if(a[j] == 0) continue;
				else if(a[j] != A[i][j]) {
					flag = false;
					break;
				}
			}
			if(flag == true) {
				s++;
				if(s==1) y = A[i];
			}
		}
		
		if(s==1) {
			for(int i = 0; i < 9; i++) {
				System.out.print(y[i] + " ");
				if((i+1)%3==0)
					System.out.println();
			}
		} else 
			System.out.println("Too Many");
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值