zoukankan      html  css  js  c++  java
  • 方格填数 (暴力dfs)

    如图,如下的10个格子,填入0~9的数字。要求:连续的两个数字不能相邻。
    (左右、上下、对角都算相邻)一共有多少种可能的填数方案?
    请填写表示方案数目的整数。

    #include <iostream>
    #include <cmath>
    using namespace std;
    int s[5][6];      //数组开大一圈,比较的时候方便 
    int book[10];  //记录数字 是否用过 
    int sum=0;
    void  dfs(int a,int b) //a代表行 b代表列 
    {    
        if(a==3&&b==4)
        {
            for(int i=1;i<=3;i++)
                 for(int j=1;j<=4;j++)
                 {
                      if( abs(s[i][j]-s[i][j-1])==1
                        ||abs(s[i][j]-s[i-1][j-1])==1
                        ||abs(s[i][j]-s[i][j+1])==1
                        ||abs(s[i][j]-s[i+1][j])==1
                        ||abs(s[i][j]-s[i+1][j+1])==1
                        ||abs(s[i][j]-s[i+1][j-1])==1
                        ||abs(s[i][j]-s[i-1][j+1])==1
                        ||abs(s[i][j]-s[i-1][j])==1
                      )   //这里的比较是直接和周围的八个相邻的数比较,不用担心数组越界,因为上边我把数组开大了一圈 
                        return ; 
                 }
            sum++;
            return ; 
        }
        for(int k=0;k<=9;k++) 
        {
            if(book[k]==0)
            {
                s[a][b]=k; //把数字放入 
                book[k]=1; //记录已经用过这个数字 
                if(b==4)   //当b==4的时候换行 
                   dfs(a+1,1); 
                else 
                    dfs(a,b+1);
                book[k]=0; //回溯 
            }
        }
        return ;
    }
    int main()
    {
        for(int i=0;i<5;i++)
            for(int j=0;j<6;j++)
                s[i][j]=-999;     //赋初始值 
        for(int i=0;i<10;i++)
            book[i]=0;              //赋初始值 
        dfs(1,2);                 //因为开大了一圈,所以从(1,2)开始 
        cout<<sum;
        return 0;
    }
  • 相关阅读:
    eclipse中的项目无法在build/classes目录下生成.class字节码
    nginx的权限问题(Permission denied)解决办法
    application/x-www-form-urlencoded、application/json、multipart/form-data、text/xml简单总结
    jackson的使用和详解
    博客园自定义样式
    java基础
    k8s
    系统服务构建运维
    私有云技术
    工程文档编写
  • 原文地址:https://www.cnblogs.com/seamusopen/p/8639646.html
Copyright © 2011-2022 走看看