#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
int place(int*);
void main(void){/*九宮圖算法*/
int a[9]={1,2,3,4,5,6,7,8,9};
int b[9]={0};/*表示數字的位置狀態*/
int j,k,i;
for(k=0;k<=3;k++){/*對於所有比5小的數*/
b[1]=a[k];/*選壹比5小的數放到第壹行第二列*/
for(j=8;j>=5;j--){/*對於所有比5大的數*/
if(k!=(8-j)){/*不選擇前面已選小數所對應的大數*/
b[0]=a[j];/*選壹比5大的數放到第壹行第壹列*/
if(place(b)){/*若得到壹解,則打印出*/
printf("\n 九宮圖\n\n");
for(i=0;i<=8;i++){
printf(" %d ",b[i]);
if((i+1)%3==0){
printf("\n\n\n");
}
}
getch();
exit(0);
}
} /* 回溯到上壹級*/
} /*回溯到根壹級 */
}
}
int place(int*p){ /*計算出其他位置的數字並檢測是否為所求的解*/
p[2]=15-p[0]-p[1];
p[4]=5;
p[6]=10-p[2];
p[3]=15-p[0]-p[6];
p[5]=10-p[3];
p[7]=10-p[1];
p[8]=10-p[0];
if(p[2]+p[5]+p[8]==p[6]+p[7]+p[8]){/*其他行和列已通過計算檢測了,只有第三行,第三列未檢測*/
return(1);
}
else{
return(0);
}
}