zoukankan      html  css  js  c++  java
  • 方格填数

    题目:

    如下的10个格子:

    答案:1580

    你有0~9十个数,每个数只能用一次,且连续的数不能放在相邻的格子里(上下,左右对角都算相邻)

    思路:模拟每个位置能放的数,DFS;递归深度为格子的个数,每个格子有10种选择:0~9,从左上角格子出发,递归出口为到达右下角:

    代码:

    #include<iostream>
    #include<math.h>
    #include<cmath>
    #include<string.h>
    using namespace std;
    const int maxn=5;
    const int inf=99999999;
    bool vis[15];
    int a[maxn][maxn];
    int ans=0;
    bool judge(int x,int y,int m)
    {
        for(int i=-1;i<=0;i++)
        {
            for(int j=-1;j<=1;j++)
            {
                int xx=x+i;
                int yy=y+j;
                if(xx<0||yy<0||xx>2||yy>3) continue;
                if(abs(a[xx][yy]-m)==1) return false;
            }
        }
        return true;
    }
    void dfs(int x,int y)
    {
        //cout<<"x:"<<x<<" "<<"y:"<<y<<endl;
        if(x==2&&y==3)
        {
            ans++;
            return ;
        }
        if(x<0||y<0||x>2||y>3) return ;
        for(int i=0;i<10;i++)
        {
            if(!vis[i]&&judge(x,y,i))
            {
                vis[i]=true;
                a[x][y]=i;
                //cout<<"a[x][y]:"<<a[x][y]<<endl;
                if(y!=3)dfs(x,y+1);
                else dfs(x+1,0);
                vis[i]=false;//回溯
                a[x][y]=inf;//回溯
            }
        }
    }
    int main()
    {
        memset(vis,false,sizeof(vis));
        for(int i=0;i<3;i++)
        {
            for(int j=0;j<4;j++)
                a[i][j]=inf;
        }
        dfs(0,1);
        cout<<ans<<endl;
    }
    当初的梦想实现了吗,事到如今只好放弃吗~
  • 相关阅读:
    CSS position, z-index
    Js闭包函数
    .net 全局配置读取
    redis学习
    .net core websocket
    .net core 部署应用程序注意事项
    signalr网上学习资料
    Cocos Creator 中如果Node在"属性检查器"中active设置为false, 则 onLoad 不会执行
    SVN服务器搭建(一)
    IndentityServer4
  • 原文地址:https://www.cnblogs.com/caijiaming/p/10013103.html
Copyright © 2011-2022 走看看