数独算法思路

来源:百度知道 编辑:UC知道 时间:2024/06/28 14:44:01
最近在玩数独游戏,感觉很神奇,就想自己编个程序来实现,可是没有思路,不知道从哪里下手,有哪位高手知道,或者有类似的经验的,请不吝赐教,高分!只要思路就可以,无论用哪种语言都可以,给个相关网站也行,只要有用的,我就给分

数独(数和)(英:Cross Sums;日:カックロ)是一种数学智力游戏。数和把填字游戏和数独巧妙地结合在一起,采用填字游戏式的棋盘,解题时在空格中填上1-9的数字。这种游戏不仅需要逻辑思维能力,还需要一点加法运算。

电脑自动生成数独游戏的谜题

要得出所有满足条件的组合确实不是件容易的事情(主要是很多,打印起来很慢) 。但偶们的目标只是每次能得到一个新的组合,然后从格子里面随机遮掉一些数字就可以了。所以只需要在解数独游戏算法的基础上稍作修改即可。

所以,算法的步骤是:

1.往第一行或第一列随机填1-9的数字

2.调用解数独算法得到一个结果

3.每行随机遮掉1-8个数字。如果需要较大的难度,也可以将1-8改为2-8或3-8,等等。

以下是console工程的代码:

// sudoku.cpp : 定义控制台应用程序的入口点。
// by superarhow(superarhow@hotmail.com)

#include "stdafx.h"

#include "conio.h"

#define SUCCESS 1
#define _FAILED 0

/* 地图类型9*9的char,每个char从0-9,0表示待填 */
typedef char MAPTYPE[9][9];
/* 行数据,同时用作“可能性”数据。如LINETYPE a; 当a[0]为真时表示
当前位置可填1,a[1]为真时表示可填2,以此类推 */
typedef char LINETYPE[9];

typedef void (*ONMAPOKCALLBACK)(MAPTYPE map);

/* 打印地图 */
void dump_map(MAPTYPE dest)
{
for ( int j = 0; j < 9; j++ )