当先锋百科网

首页 1 2 3 4 5 6 7

将数字 1 … 9 1 \ldots 9 19 填入一个 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;
}