题目:九宫格
将数字1~9填入一个3×3的九宫格中,使得格子中每一横行和的值全部相等,每一竖列和的值全部相等。请你计算有多少种填数字的方案。
思路:
将九宫格看做一个一维数组,初始如下,然后求1~9的全排列,每求出一个排列,判断一次是否符合规则,符合的话统计数加一
代码:
public class Main {
private static int n=9,c=0;
private static int[] a={1,2,3,4,5,6,7,8,9};
public static void main(String[] args) {
// TODO Auto-generated method stub
perm(0);
System.out.println(c);
}
private static void perm(int k) {
// TODO Auto-generated method stub
if(k==n){
if(judge()){
c++;
}
return;
}
for(int i=k;i<n;i++){
swap(k, i);
perm(k+1);
swap(k, i);
}
}
private static void swap(int x,int y){
int t=a[x];
a[x]=a[y];
a[y]=t;
}
//判断是否符合规则
private static boolean judge(){
int t=a[0]+a[1]+a[2];
if(t!=a[3]+a[4]+a[5]
||t!=a[6]+a[7]+a[8]
||t!=a[0]+a[3]+a[6]
||t!=a[1]+a[4]+a[7]
||t!=a[2]+a[5]+a[8]
){
return false;
}
return true;
}
}