如何用PASCAL编写数独程序 SUDOKU
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/11 00:38:12
如何用PASCAL编写数独程序 SUDOKU
要求用PASCAL语言(如果给PASCAL的代码给加分,如果实在给不出可以给C的代码,但是不加分).
要求,0.01秒之内算出任何9*9的矩阵,只输出一种情况即可,代码长度不限.(机器配置 P4 1.6G 256MB)
若程序超时,请不要发表回答,谢谢合作.
举个简单的例子:
_1____8_7
__985____
_384__2__
95_____8_
______96_
7_6_9___4
3_7__5___
___9_4___
46__1___2
要求用PASCAL语言(如果给PASCAL的代码给加分,如果实在给不出可以给C的代码,但是不加分).
要求,0.01秒之内算出任何9*9的矩阵,只输出一种情况即可,代码长度不限.(机器配置 P4 1.6G 256MB)
若程序超时,请不要发表回答,谢谢合作.
举个简单的例子:
_1____8_7
__985____
_384__2__
95_____8_
______96_
7_6_9___4
3_7__5___
___9_4___
46__1___2
空位用空格补齐(每用下划线)
可以文件输入(用编译好的程序打开文件),亦可键盘输入.
用打过CRT补丁的Turbo Pascal编译,或使用Free Pascal(这个不保证正常)
样例没有超时,但对于特殊数据可能超时(我还没有数据,自己写得太简单,但是,特殊数据基本不会不超过0.01s)
程序如下:
program sdjsq;{数独解算器}
{-------------调用库------------------------------------------------USES}
uses CRT,Dos;{使用CRT Dos库}
{-------------数据类型定义------------------------------------------TYPE}
type
sz=0..9;{数字,byte类型的子界占一byte}
sy=1..9;{same as sz}
sd=array [sy,sy] of sz;{数独,占8×8×1byte=81byte}
ss=set of sy;{数字的集合}
dot=
record
s:ss;
n,x,y:byte;
end;
{-------------变量定义-----------------------------------------------VAR}
var
a:sd;
x,y:byte;
list:record
num:byte;
dat:array [1..81] of dot;
end;
{TRY}
function answer:boolean;
var
ans:boolean;
procedure try(num:byte);
var
i,j,n,x,y:byte;
s:ss;
begin
if keypressed then case readkey of #27:halt;#0:if readkey=#107 then halt; end;
if num
可以文件输入(用编译好的程序打开文件),亦可键盘输入.
用打过CRT补丁的Turbo Pascal编译,或使用Free Pascal(这个不保证正常)
样例没有超时,但对于特殊数据可能超时(我还没有数据,自己写得太简单,但是,特殊数据基本不会不超过0.01s)
程序如下:
program sdjsq;{数独解算器}
{-------------调用库------------------------------------------------USES}
uses CRT,Dos;{使用CRT Dos库}
{-------------数据类型定义------------------------------------------TYPE}
type
sz=0..9;{数字,byte类型的子界占一byte}
sy=1..9;{same as sz}
sd=array [sy,sy] of sz;{数独,占8×8×1byte=81byte}
ss=set of sy;{数字的集合}
dot=
record
s:ss;
n,x,y:byte;
end;
{-------------变量定义-----------------------------------------------VAR}
var
a:sd;
x,y:byte;
list:record
num:byte;
dat:array [1..81] of dot;
end;
{TRY}
function answer:boolean;
var
ans:boolean;
procedure try(num:byte);
var
i,j,n,x,y:byte;
s:ss;
begin
if keypressed then case readkey of #27:halt;#0:if readkey=#107 then halt; end;
if num