- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数独sudoku的生成与破解
数独(sudoku)的生成与破解
数独游戏的规则
数独(sudoku),起源于瑞士,于1970 年代由美国的一家数学逻辑游戏杂志首先发表,当时名为Number Place。及后在日本大力推广下得以发扬光大,于1984 年取名“数独”,即“独立的数字”的省略,在一个9×9的方格中,有81个小方格组成,然后又分9个大块,每块由3x3的方格组成,就是中国的九宫阵。
游戏规则:“九宫阵”是一个9×9的方阵,它是由九个“九宫格”(图中黑色实线围住的3×3的方阵)构成的,每个九宫格又是由九个小格子构成的,在每个小格子里面填上1~9中的数字,使得每个数字在“九宫阵”的每行、每列、每个九宫格中均只出现一次。
游戏开始前会有一些格子上写好了数,你需要在剩下的格子里填数,真到把所有格子填满,并且要求,任何一行或一列或者一个小九宫中没有相同的数字,当然你只能用1~9之间的9个数字。如下图就是一个数独游戏。
题 目 答 案所有满足条件的组合是很多然后从格子里面随机一些数字就可以了从格子里面随机数字blank=33~35;
2 中等: blank=36~38;
3 困难: blank=39~41;
源程序
#ifndef SUDOKU_RICK_0701_
#define SUDOKU_RICK_0701_
class CSudoku
{
int map[9][9];
int blanks;
int smod;
int solves;
int check(int,int,int*);
void dfs();
public:
enum{ANY=0,ALL=1};
CSudoku(int);
CSudoku::CSudoku(int *data);
void SudokuGenerator(int); // 随机生成数独,n越大越难
void SudokuGenerator(int *data); // 人工指定数独
//virtual ~CSudoku();
void display(); // 显示数独
int resolve(int mod=ALL); // 解数独
void analyze();
};
#endif
#include stdio.h
#include stdlib.h
#include time.h
#include iostream
#include iomanip //要用到格式控制符
using namespace std;
CSudoku::CSudoku(int n)
{
int j;
j=rand()%3;
blanks=n+j;
SudokuGenerator(blanks);
coutendl随机数独:endlendl;
//cout(空格子数为blanks)endl;
display();
coutpress enter to continue! endl;
getchar();
getchar();
while(1)
{
cout %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% endl;
cout %% 请选择您的操作: %% endl;
cout %%============================%% endl;
cout %% %% endl;
cout %% 1. 显示当前数独 %% endl;
cout %% 2. 分析求解 %% endl;
cout %% 3. 查看结果 %% endl;
cout %% 4. 返 回 %% endl;
cout %% %% endl;
cout %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% endl;
int select;
cinselect;
switch (select)
{
case 1:
{
coutendl当前随机数独: endl;
di
文档评论(0)