幻方

来源:互联网 发布:匠人工坊淘宝 编辑:程序博客网 时间:2024/04/28 15:18
package 幻方;import java.util.Scanner;/** * 目前使用数组实现,但是考虑将来可以缩减时间复杂度,增加空间复杂度 * 减少循环相乘次数 *  * 具体来说使用循环去除变量中不必要参加循环的数据,可以节省很多次计算 * 16x16x16x16 - 16x15x14x13等,比起增加的设置时间 *  *   * */public class Main {int arr[] = new int[26];boolean arr2[] = new boolean[26];int i = 0;int p =0;static int k = 0, ak = 0;public static void main(String[] args) {Scanner input = new Scanner(System.in);ak = input.nextInt();input.close();Main aa = new Main(); if(ak>35) {aa.p=5;k=35;}if(ak>69) {aa.p=7;k=69;}for (int i = 1; i <= 20; i++) {aa.arr[i - 1] = 19;aa.arr2[i - 1] = false;}aa.ff(0); }boolean b = false;private void ff(int line) {if (line == 4) {k++;if (k == ak) {b = true;for (int i1 = 0; i1 <= 3; i1++) {for (int j4 = 0; j4 <= 3; j4++)System.out.print(arr[i1 * 4 + j4] + " ");System.out.println();}}}if (line == 4 || b) {this.clear((line - 1) * 4 + 0);return;}for (int i = 1; i <= 16; i++) {arr2[arr[line * 4 + 0]] = false;if (arr2[i])continue;arr[line * 4 + 0] = i;if (line == 3) {if (arr[3] + arr[6] + arr[9] + arr[12] != 34)continue;if (arr[0] + arr[4] + arr[8] + arr[12] != 34)continue;}arr2[i] = true;if(line >0)p =0;for (int j = p; j <= 16; j++) {arr2[arr[line * 4 + 1]] = false;if (arr2[j])continue;arr[line * 4 + 1] = j;if (line == 3) {if (arr[1] + arr[5] + arr[9] + arr[13] != 34)continue;}arr2[j] = true;for (int j2 = 1; j2 <= 16; j2++) {arr2[arr[line * 4 + 2]] = false;if (arr2[j2])continue;arr[line * 4 + 2] = j2;if (line == 3) {if (arr[2] + arr[6] + arr[10] + arr[14] != 34)continue;}arr2[j2] = true;for (int j3 = 1; j3 <= 16; j3++) {arr2[arr[line * 4 + 3]] = false;if (arr2[j3])continue;arr[line * 4 + 3] = j3;if (arr[line * 4 + 0] + arr[line * 4 + 1]+ arr[line * 4 + 2] + arr[line * 4 + 3] != 34)continue;if (line == 3) {if (arr[3] + arr[7] + arr[11] + arr[15] != 34)continue;if (arr[0] + arr[5] + arr[10] + arr[15] != 34)continue;}arr2[j3] = true;ff(line + 1);}}}}this.clear(line * 4 + 0);}private void clear(int n) {//TODO: 必须n-1 ,否则 3的取值不同for (int i = n-1; i <= 15; i++)if(i>-1)arr2[arr[i]] = false;}}

0 0
原创粉丝点击