如下的10个格子

填入0~9的数字。要求:连续的两个数字不能相邻。

(左右、上下、对角都算相邻)

一共有多少种可能的填数方案?

请填写表示方案数目的整数。

注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

答案6 (15分)

 

代码:

#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <cstdio>
using namespace std;
int dir[10][4] = {1,3,4,5,2,4,5,6,5,6,-1,-1,
                  4,7,8,-1,5,7,8,9,6,8,9,-1,
                  9,-1,-1,-1,8,-1,-1,-1,9,-1,
                  -1,-1,-1,-1,-1,-1};
bool check(int *a) {
    for(int i = 0;i < 10;i ++) {
        for(int j = 0;j < 4;j ++) {
            if(dir[i][j] != -1 && abs(a[i] - a[dir[i][j]]) == 1) return false;
        }
    }
    return true;
}
int main() {
    int c = 0;
    int a[10] = {0,1,2,3,4,5,6,7,8,9};
    do {
        if(check(a)) c ++;
    }
    while(next_permutation(a,a + 10));
    printf("%d",c);
}