#include<bits/stdc++.h>
using namespace std;
int num=0;
int a[4][5];
int used[10];
bool check(int i){
int r=i/4;
int c=i%4;
if(abs(a[r][c-1]-a[r][c])==1 && c-1>=0){
return false;
}
if(abs(a[r-1][c-1]-a[r][c])==1 && c-1>=0&& r-1>=0){
return false;
}
if(abs(a[r-1][c]-a[r][c])==1 && r-1>=0){
return false;
}
if(abs(a[r-1][c+1]-a[r][c])==1 && r-1>=0&&c+1<=3){
return false;
}
return true;
}
void dfs(int i){
if(i==11){
num++;return ;
}
for(int j=0;j<=9;j++){
if(used[j]==0 ){
a[i/4][i%4]=j;
used[j]=1;
if(check(i)){//总是手误写成中括号,切记调用函数用小括号:check(i)
dfs(i+1);
}
used[j]=0;
}
}
}
int main(){
a[0][0]=20;
dfs(1);
cout<<num;
return 0;
}
方格填数
如下的10个格子
+--+--+--+
| | | |
+--+--+--+--+
| | | | |
+--+--+--+--+
| | | |
+--+--+--+
(如果显示有问题,也可以参看【图1.jpg】)
填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)
一共有多少种可能的填数方案?
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。