杈撳嚭錛?br />
2 7 6
9 5 1
4 3 8
package com.sitinspring;
public class SquarePuzzle{
/**
* 闃舵暟
*/
private int n;
/**
* 鏂歸樀鏁扮粍
*/
private Integer[] arr;
/**
* 騫沖潎鍊?br />
*/
private int average;
public SquarePuzzle(int n){
this.n=n;
// 寤虹珛鏁扮粍騫跺緱鍒板鉤鍧囧?/span>
arr=new Integer[n*n];
average=0;
for(int i=1;i<=n*n;i++){
arr[i-1]=i;
average+=i;
}
average=average/n;
// 閫掑綊鏌ョ湅
permutation(arr,0,arr.length);
}
private void permutation(Integer[] arr,int start,int end){
if(start<end+1){
permutation(arr,start+1,end);
for(int i=start+1;i<end;i++){
Integer temp;
temp=arr[start];
arr[start]=arr[i];
arr[i]=temp;
permutation(arr,start+1,end);
temp=arr[i];
arr[i]=arr[start];
arr[start]=temp;
}
}
else{
/*for(int i=0;i<end;i++){
System.out.print(arr[i]);
}
System.out.print("\n");*/
int i,sum=0;
for(i=0;i<n;i++){
sum+=arr[i];
}
if(sum!=average){
return;
}
// 鏌ョ湅鏄惁綰墊í瀵硅綰垮奸兘鐩哥瓑
checkAndPrint(arr);
}
}
private void checkAndPrint(Integer[] arr){
Integer[][] arr2=new Integer[n][n];
int i,j,sum;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
arr2[i][j]=arr[i*n+j];
}
}
// 妯?/span>
for(i=0;i<n;i++){
sum=0;
for(j=0;j<n;j++){
sum+=arr2[i][j];
}
if(sum!=average){
return;
}
}
// 綰?/span>
for(i=0;i<n;i++){
sum=0;
for(j=0;j<n;j++){
sum+=arr2[j][i];
}
if(sum!=average){
return;
}
}
// 瀵硅綰?/span>
sum=0;
for(i=0;i<n;i++){
sum+=arr2[i][i];
}
if(sum!=average){
return;
}
// 瀵硅綰?/span>
sum=0;
for(i=0;i<n;i++){
sum+=arr2[i][n-i-1];
}
if(sum!=average){
return;
}
// 鏈緇堟墦鍗?/span>
for(i=0;i<n;i++){
for(j=0;j<n;j++){
System.out.print(arr2[i][j]+"\t");;
}
System.out.print("\n");;
}
System.out.print("\n");;
System.exit(0);
}
public static void main(String[] args){
new SquarePuzzle(3);
}
}

]]>