求数独程序

来源:百度知道 编辑:UC知道 时间:2024/06/07 05:05:40
在网上搜索了半天找不到理想的答案
要求一个数独的c语言程序,运用大概while ,for 等最基本的函数,因为c语言才学4个月,老师就要写这个。希望越快越好。
不要求用图形什么的显示
只要求在c环境下最基本的可以让使用者用程序添加某个数,然后如果这个数符合条件(1<=n<=9),并且行列并且小九宫格里没有重复的数等,就有效,可以添加等,最基本的。谢谢啦。
小弟在法国求学。下周三就要教了。

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

typedef unsigned int UINT ;
typedef struct tag_Sudu {
char **rSudu;
char **xNumberStatus; //xNumberStatus[i][x]=y 表示数字i+1放在坐标(x,y),如果y=NOLAY,表示第x列没有放置数字i+1
char **yNumberStatus; //同xNumStatus,不过是按照y方向处理
UINT uEmptyPosition; //记录sudu中总的空格数目。
}Sudu;

int xNumberPolicy(Sudu *lpSudu);
int yNumberPolicy(Sudu *lpSudu);

//可以在这里不断的添加想到的策略.
//如果函数的返回值是-1,说明Sudu的当前状态是错误的,就是所Sudu无解.
//如果函数的返回值是0,说明Sudu暂时是合法的,就是说可能有解.
typedef int(*pFunPolicy)(Sudu *lpSudu);
pFunPolicy pfnPolicy[] = {
xNumberPolicy,
yNumberPolicy
};

#define NOLAY -1

#define XVALID(lpSudu, index, x) ((lpSudu)->xNumberStatus[index][x] == NOLAY)
#define YVALID(lpSudu, index, y) ((lpSudu)->yNumberStatus[index][y] == NOLAY)
#define EMPTYGRID(lpSudu, x, y) ((lpSudu)->rSudu[y][x] == 0) <