第七届蓝桥杯大赛个人赛省赛(软件类)真题6


方格填数

如下的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;
}

  

原文地址:https://www.cnblogs.com/a863886199/p/6561337.html