首页 > 其他 > 详细

生成数独终局

时间:2018-04-16 00:11:19      阅读:238      评论:0      收藏:0      [点我收藏+]

本次个人项目是要求生成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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!