题目大意:
给你一个九宫格,每个格子只能填1--9这九个数字并且不能重复,题目给你每一行每一列三个数字之和,问一共有多少种可行的方法?
解题思路:
其实就是一道简单的搜索题,用一个k标记选取数的个数,具体见代码:
AC代码:
#include<iostream> #include<stdio.h> #include<stdlib.h> #include<algorithm> #include<string.h> #include<math.h> using namespace std; int sum,a1,b,c,d,e,f,g; int a[10]; int judge() { if((a[0]+a[1]+a[2])==a1&&(a[3]+a[4]+a[5])==b&&(a[6]+a[7]+a[8])==c&&(a[0]+a[3]+a[6])==d&&(a[1]+a[4]+a[7])==e&&(a[2]+a[5]+a[8])==f) return 1; else return 0; } void dfs(int a[],int k) { int i,t; if(k>=9) { if(judge()) sum++; } for(i=k;i<9;i++) { t=a[k];a[k]=a[i];a[i]=t; dfs(a,k+1); t=a[k];a[k]=a[i];a[i]=t; } } int main() { while(scanf("%d%d%d%d%d%d",&a1,&b,&c,&d,&e,&f)!=EOF) { for(int i=1;i<=9;i++) { a[i-1]=i; } sum=0; dfs(a,0); printf("%d ",sum); } return 0; }