方格填数
如下的10个格子
(如果显示有问题,也可以参看【图1.jpg】)
填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)
一共有多少种可能的填数方案?
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
#include<iostream> #include<cmath> using namespace std; const int n=9; int arr[20], brr[20], sum=0; void DFS(int i) { if (i==11){ if ((fabs(arr[1]-arr[2])!=1)&&(fabs(arr[1]-arr[4])!=1)&&(fabs(arr[1]-arr[5])!=1)&&(fabs(arr[1]-arr[6])!=1)&& (fabs(arr[2]-arr[3])!=1)&&(fabs(arr[2]-arr[5])!=1)&&(fabs(arr[2]-arr[6])!=1)&&(fabs(arr[2]-arr[7])!=1)&& (fabs(arr[3]-arr[6])!=1)&&(fabs(arr[3]-arr[7])!=1)&&(fabs(arr[4]-arr[5])!=1)&&(fabs(arr[4]-arr[8])!=1)&& (fabs(arr[4]-arr[9])!=1)&&(fabs(arr[5]-arr[6])!=1)&&(fabs(arr[5]-arr[9])!=1)&&(fabs(arr[5]-arr[8])!=1)&&(fabs(arr[5]-arr[10])!=1)&& (fabs(arr[6]-arr[7])!=1)&&(fabs(arr[6]-arr[9])!=1)&&(fabs(arr[6]-arr[10])!=1)&&(fabs(arr[8]-arr[9])!=1)&&(fabs(arr[9]-arr[10])!=1)&&(fabs(arr[7]-arr[10])!=1)){ for (int k=1; k<=10; k++) cout<<arr[k]<<" "; cout<<endl; sum++; } return ; } else { for (int j=0; j<=n; j++){ if (!brr[j]){ arr[i]=j; brr[j]=1; DFS(i+1); brr[j]=0; } } } } int main(){ DFS(1); cout<<sum; return 0; }