将数字 1 … 9 1 \ldots 9 1…9 填入一个 3 × 3 3 \times 3 3×3 的九宫格中,使得格子中每一横行和的值全部相等,每一竖列和的值全部相等。请你计算有多少种填数字的方案。
此题可认为是一个全排列问题,利用深度搜索算法解决。
答案:72
//全排列
#include <stdio.h>
#define N 9
int a[N+1];
int book[N+1] = {0};
int n=0;
void dfs(int step) {
int k;
if(step==N) {
if(a[0]+a[1]+a[2]==a[3]+a[4]+a[5]&&a[0]+a[1]+a[2]==a[6]+a[7]+a[8]) {
if(a[0]+a[3]+a[6]==a[1]+a[4]+a[7]&&a[0]+a[3]+a[6]==a[2]+a[5]+a[8]) {
n++;
}
}
return;
}
for(k=1;k<=N;k++) {
if(book[k]==0) {
a[step] = k;
book[k] = 1;
dfs(step+1);
book[k] = 0;
}
}
return;
}
int main() {
dfs(0);
printf("%d",n);
return 0;
}