// https://v.JTdQ2So/ 矗接觀看视频!
#include<stdio.h>
int A[9];
int a[9]={1,2,3,4,5,6,7,8,9};
int isok(int n)//分析A[]第N个数与前面的数比较为递归 作准备。
{
int flag=1,i;
for(i=0;i<n;i++){
if(A[n]==A[i]) flag=0;//不与前面已选择的数相同
}
if(n==5 && A[4]!=5) flag=0 ;
if(n==3 && A[0]+A[1]+A[2]!=15)
flag=0;
if(n==6 && A[5]+A[4]+A[3]!=15 ) flag=0;
if(n==7 && A[0]+A[3]+A[6]!=15)
flag=0;
if(n==7 && A[2]+A[4] +A[6]!=15)
flag=0;
if(n==8 && A[1]+A[4]+A[7]!=15)
flag=0;
return flag;
}
void output()
{
int i;
for(i=0; i<9;i++){
printf("%2d",A[i]);
if(i%3==2) printf("\n");
}
printf("----------\n");
}
void add_ok(int n)
{
int j;
if(n==9)
{
output();
return ;
}
for(j=0;j<9;j++)
{
A[n]=a[j];
if(isok(n) ) add_ok(n+1);
}
}
int main()
{
add_ok(0);
return 0;
}