zoukankan      html  css  js  c++  java
  • c++_方格填数(最新方法)

     


    方格填数

    如下的10个格子
    +--+--+--+
    | | | |
    +--+--+--+--+
    | | | | |
    +--+--+--+--+
    | | | |
    +--+--+--+

    (如果显示有问题,也可以参看【图1.jpg】)

    填入0~9的数字。要求:连续的两个数字不能相邻。
    (左右、上下、对角都算相邻)

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

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

    #include <iostream>
    #include <math.h>
    #include <string.h>
    using namespace std;
    
    int a[10];
    int visit[10];
    int count=0;
    
    void dfs(int a[],int n){
        
        if(n==10){
        if(abs(a[0]-a[1])==1||abs(a[0]-a[3])==1||abs(a[0]-a[4])==1||abs(a[0]-a[5])==1
        ||abs(a[1]-a[2])==1||abs(a[1]-a[4])==1||abs(a[1]-a[5])==1||abs(a[1]-a[6])==1
        ||abs(a[2]-a[5])==1||abs(a[2]-a[6])==1
        ||abs(a[3]-a[4])==1||abs(a[3]-a[7])==1||abs(a[3]-a[8])==1
        ||abs(a[4]-a[5])==1||abs(a[4]-a[7])==1||abs(a[4]-a[8])==1||abs(a[4]-a[9])==1
        ||abs(a[5]-a[6])==1||abs(a[5]-a[8])==1||abs(a[5]-a[9])==1
        ||abs(a[6]-a[9])==1
        ||abs(a[7]-a[8])==1
        ||abs(a[8]-a[9])==1){
            return;
        }else{
            count++;
            return;
        }
        }
        else{
            for(int i=0;i<=9;i++){
                if(visit[i]==0){
                    a[n]=i;
                    visit[i]=1;
                    dfs(a,n+1); //第几层,0-9有十层 dfs(10) 是第十层 
                    visit[i]=0;
                }
            }
        }
    }
    
    int main(){
        
        memset(visit,0,sizeof(visit));
        dfs(a,0);
        cout<<count;
    } 
  • 相关阅读:
    微信小程序之base64转为本地图片
    微信小程序之页面跳转方法
    一些收集的社区网址+学习网站、文档
    11-DOM介绍
    10-关于DOM的事件操作
    09-伪数组 arguments
    前端---css
    前端---html
    并发编程------网络IO模型、IO多路复用
    并发编程------协程
  • 原文地址:https://www.cnblogs.com/liushuncheng/p/8654618.html
Copyright © 2011-2022 走看看