生成数独终局

本次个人项目是要求生成1e6个数独终局。

首先说说数独的规则,数独的棋盘是一个9×9的格图,每3×3又是一个9宫格。

数独的要求是每行、每列、每个9宫格中,1~9这9个数字必须出现且仅出现一次。

对于每一个数独终局,我们只需把所有的一换成而或者其他的数字,就会生成一个新的数独终局,那么就有了9!种,但是要求中左上角的数字是不能动的,所以一个全新的数独“种子”通过8的全排列之后就能产生8!个数独终局,所以我们只需找到25个“种子”再通过数字变换即可得到1e6个数独终局。

下面是我的代码部分实现:

for(k=0;k<9;k++)
            {
                for(x=0;x<9;x++)
                {
                    for(int j=1;j<9;j++)
                    {
                        if(shudu[temp][k][x]==j)
                        {
                            output[k][x]=str[i][j];
                        }
                    }
                }
            }
            for(a=0;a<9;a++)
            {
                for(b=0;b<8;b++)
                {
                    printf("%d ",output[a][b]);
                }
                printf("%d\n",output[a][8]);
            }
            printf("\n");
        }
        temp++;
        if(temp*40320>N-1)
            return 0;

因为没有直接运算,而是调换顺序来生成新的终局,所以效率很不错。

欢迎各位dalao指点。

原文地址:https://www.cnblogs.com/ting-ting/p/8850237.html

时间: 2024-10-01 14:24:09

生成数独终局的相关文章

软件工程-个人项目(一) 数独终局的一些想法

任务:实现一个能过生成数独终局并且能求解数独问题的控制台程序. 代码地址:https://github.com/MrFasl/1120172188 使用语言:C++ 每个数独终局包含9*9个数字,第一个字母为(8+8)%9+1 = 8,即每个数独终局第一个数字均为8 关于数独终局数量的考虑: 数量要求为1<=N<=1000000 = 1e6  在首个数字固定的情况下,第一行可用的组合有8!= 40320种 <1e6. 现在考虑如何扩充数量,由于第一行不能改变,所以考虑456行和789行的

一个生成数独的程序

以下是一个生成数独的程序,利用深度优先遍历的方式.当生成9x9的的数独时,我的个人电脑需要花费的时间太长,而3x3和6x6的可以正确生成. //mySIZE是数独棋盘的边长,棋盘是mySIZE*mySIZE的大小 int mySIZE = 9; void print(const vector<vector<int>> &num) { for (int i = 0; i < mySIZE; i++) { for (int j = 0; j < mySIZE; j+

个人项目-数独终局生成与解数独

1.先给出在这个小项目的开发过程中各个阶段的程序及相关文档 https://github.com/xulink/sudoku: 2. PSP2.1                     Personal Software Process Stages                                                                           Planning       Estimate       Development       A

用js遍历生成数独可行数据(未优化 有bug版本)

var chess; var start; var end; //创建棋盘 function creatChess() { chess = new Array(); for (var i = 0; i < 9; i++) { chess[i] = new Array(); for (var j = 0; j < 9; j++) { chess[i][j] = 0; } } } //打印棋盘 function printChess() { var say = ""; for

软件工程基础个人个人项目 数独终局声称与解数独问题的控制台程序

Github项目 时间预估: 需求分析: 模块划分: 功能建模 : 解题思路: 设计实现: 性能优化: 代码说明: 实际时间花费: 原文地址:https://www.cnblogs.com/YZqiangBlog/p/12039031.html

[2017BUAA软工]第一次个人项目 数独的生成与求解

零.Github链接 https://github.com/xxr5566833/sudo 一.PSP表格 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划     · Estimate · 估计这个任务需要多少时间 10   Development 开发     · Analysis · 需求分析 (包括学习新技术)  120   · Design Spec · 生成设计文档  60   · Design

2017BUAA软工个人项目之数独

1.项目GitHub地址:https://github.com/ZiJiaW/Soduko (由于一开始把sudoku看成了soduko,于是名字建错了,读起来可能有点奇怪-) 2.项目PSP表格如下: PSP2.1 Personal Software Process Stages 预估耗时 实际耗时 Planning 计划 0.5h 0.5h .Estimate .估计这个任务需要多少时间 0.5h 0.5h Development 开发 20.5h 21.5 .Analysis .需求分析(

数独个人项目

1) GitHub地址 https://github.com/ChengHaoShi/Project 2) PSP表格 PSP2.1 Personal Software Process Stages 预估耗时(小时) 实际耗时(小时) Planning 计划 1.5 1 ·Estimate ·估计这个任务需要多少时间 1.5 1 ·Development ·开发 44.5 41.5 ·Analysis ·需求分析 (包括学习新技术)   12 16 ·Design Spec ·生成设计文档 8

#2018BIT软件工程基础#个人项目:数独

一.开发时间 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划     · Estimate · 估计这个任务需要多少时间 5 6 Development 开发     · Analysis · 需求分析 (包括学习新技术) 420 840 · Design Spec · 生成设计文档 120 180 · Design Review · 设计复审 (和同事审核设计文档) 10 20 · Coding Sta