[原创]9宫格填数字

题目大意:

      给你一个九宫格,每个格子只能填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;
}
原文地址:https://www.cnblogs.com/gaojupeng/p/4439508.html