zoukankan      html  css  js  c++  java
  • 洛谷 P1784 数独

    洛谷 P1784 数独

    洛谷传送门

    题目描述

    数独是根据 9 imes 99×9 盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫内的数字均含 1 - 91−9 ,不重复。每一道合格的数独谜题都有且仅有唯一答案,推理方法也以此为基础,任何无解或多解的题目都是不合格的。

    芬兰一位数学家号称设计出全球最难的“数独游戏”,并刊登在报纸上,让大家去挑战。

    这位数学家说,他相信只有“智慧最顶尖”的人才有可能破解这个“数独之谜”。

    据介绍,目前数独游戏的难度的等级有一到五级,一是入门等级,五则比较难。不过这位数学家说,他所设计的数独游戏难度等级是十一,可以说是所以数独游戏中,难度最高的等级。他还表示,他目前还没遇到解不出来的数独游戏,因此他认为“最具挑战性”的数独游戏并没有出现。

    输入格式

    一个未填的数独。

    输出格式

    填好的数独。


    题解:

    暴搜填数独。

    POJ2676一样,就是输出格式变了一下。具体看代码:

    #include<cstdio>
    #include<cstring>
    using namespace std;
    int t,cnt;
    int mp[11][11];
    char mapi[11][11];
    bool flag;
    bool row[11][11],col[11][11],grid[11][11];
    void dfs(int x,int y)
    {
        if(flag)
            return;
        if(mp[x][y])
        {
            if(x==9&&y==9)
            {
                for(int i=1;i<=9;i++)
                {
                    for(int j=1;j<=9;j++)
                        printf("%d ",mp[i][j]);
                    puts("");
                }
                flag=1;
                return;
            }
            if(y==9)
                dfs(x+1,1);
            else
                dfs(x,y+1);
        }
        if(!mp[x][y])
        {
            int k=3*((x-1)/3)+(y-1)/3+1;
            for(int i=1;i<=9;i++)
            {
                if(!row[x][i]&&!col[y][i]&&!grid[k][i])
                {
                    row[x][i]=1;
                    col[y][i]=1;
                    grid[k][i]=1;
                    mp[x][y]=i;
                    if(x==9&&y==9)
                    {
                        for(int i=1;i<=9;i++)
                        {
                            for(int j=1;j<=9;j++)
                                printf("%d ",mp[i][j]);
                            puts("");
                        }
                        flag=1;
                        puts("");
                        return;
                    }
                    if(y==9)
                        dfs(x+1,1);
                    else
                        dfs(x,y+1);
                    row[x][i]=0;
                    col[y][i]=0;
                    grid[k][i]=0;
                    mp[x][y]=0;
                }
            }
        }
    }
    int main()
    {
        for(int i=1;i<=9;i++)
            for(int j=1;j<=9;j++)
            {
                scanf("%d",&mp[i][j]);
                if(mp[i][j])
                {
                    int k=3*((i-1)/3)+(j-1)/3+1;
                    row[i][mp[i][j]]=1;
                    col[j][mp[i][j]]=1;
                    grid[k][mp[i][j]]=1;
                }
            }
        dfs(1,1);
        return 0;
    }
    
  • 相关阅读:
    数据分析的数据来源都有哪些?
    数据分析的技能要求及分析流程
    (原创)使用matlab-cftools拟合工具的问题
    Spring加载xml配置文件的方式
    Spring-ResolvableType可解决的数据类型
    从list中取N个随机生成一个集合
    AOP统一处理修改人、创建人、修改时间、创建时间
    Java依据集合元素的属性,集合相减
    java去掉数字后面的0
    数字格式化NumberFormat
  • 原文地址:https://www.cnblogs.com/fusiwei/p/13840534.html
Copyright © 2011-2022 走看看