方格填数如下的10个格子
![]()
填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)一共有多少种可能的填数方案?
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
解法一:
枚举全排列,全排列的结果保存在nums数组里面,nums数组按照顺序放的是3x4个格子的数(第一个格子和最后一个格子没数我们用-1代替,这样的目的是为了一维能向二维转化),我们需要判断这中放置方法是否合理,对于nums中的每一个数,分解出它在二维坐标中的位置,对于相邻的八个方向如果有值和当前位置的值相等则说明这个放置方法不合理。如果所有位置都没有发现有相邻的,则当前放置方法合理,可能的方案数加1。
#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;
vector<int> nums={-1,0,1,2,3,4,5,6,7,8,9,-1};
bool test(){
for(int i=1;i<nums.size()-1;i++){
int r