当前位置: 首页 >> 程序设计 >> 数据结构和算法 >> 数独◎终结者
 

数独◎终结者

作者:georgebush      来源:     发表时间:2006-12-02     浏览次数:      字号:    

内容摘要 README 使用方法: STEP One:在文本文档中 写入81个数(待填的用0表示,每九个换行,美两个数之间空一个) 保存为 input.in(主意后缀) 运行 “数独终结者” 文件夹内会生成一个Answer.out的文件,用文本打开,便是答案 (bestshudu.pas是源程序(pascal)) 特别注意:请不要输入过于“松弛“的数据,终结者会算出所有的解答。 作者 : 刘仲林 学校:上外附中 高一(二)班 联系方式: QQ:610179465 MSN:lzl901030@126.com

type
 tmap=array[1..81] of byte;
Const
  sort:array[1..9,1..9] of integer=(( 1,2,3,10,11,12,19,20,21),
                                    ( 4,5,6,13,14,15,22,23,24),
                                    ( 7,8,9,16,17,18,25,26,27),
                                    (28,29,30,37,38,39,46,47,48),
                                    (31,32,33,40,41,42,49,50,51),
                                    (34,35,36,43,44,45,52,53,54),
                                    (55,56,57,64,65,66,73,74,75),
                                    (58,59,60,67,68,69,76,77,78),
                                    (61,62,63,70,71,72,79,80,81));
var
  i,j:integer;
  map:tmap;
Procedure print;
var i,j:integer;
begin
 for i:=1 to 81 do begin
  write(map[i]:2);
  if i mod 9=0 then writeln;
 end;
 writeln;
 readln;
ENd;
Procedure try(x:integer);
var i,j,k,l:integer;
    t:tmap;
    b:array[0..9] of boolean;
begin
if x>81 then begin
  print;
  exit;
end;
fillchar(b,sizeof(b),false);
if map[x]<>0 then b[1]:=true;
if map[x]=0 then begin
   for j:=1 to 9 do b[j]:=true;
   {check rows}
   for j:=1 to 81 do
     if (j mod 9=x mod 9) then b[map[j]]:=false;
   {check blocks}
   for l:=1 to 9 do
     for j:=1 to 9 do
     if sort[l,j]=x then begin
        for k:=1 to 9 do b[map[sort[l,k]]]:=false;
     break;
     end;
   {Check lines}
   l:=x mod 9;
   if l=0 then l:=9;
   for j:=1 to l-1 do
     b[map[x-j]]:=false;
   for j:=1 to 9-l do
     b[map[x+j]]:=false;

end;
 for i:=1 to 9 do
  if b[i] then begin
     t:=map;
     if map[x]=0 then map[x]:=i;
     try(x+1);
     map:=t;
  end;
End;
begin
  assign(input,'input.in');reset(input);
  assign(output,'Answers.out');rewrite(output);
  writeln('^.^  数独立终结者  ^.^ ');
  for i:=1 to 81 do begin
     if i mod 9 =0 then readln(map[i]) else read(map[i]);
  end;
  try(1);
writeln('作者 : 刘仲林');
writeln(‘学校:上外附中       高一(二)班’);
writeln('联系方式: ');
writeln('QQ:610179465');
writeln('MSN:lzl901030@126.com');
  close(input);close(output);
  readln;
End.

编辑 georgebush

 
 
 
评论更多>>
 
运行后出现 Runtime error 2 at $00401564 $00401564 $0040173E 效率极低 敢问楼上的,用的是pascal的什么版本,怎么还能出现中文?知道的话,请发一下。 blog:http://hi.baidu.com/%BF%D7%B4%F3%C5%DA qq:812884336 我这里也有一个pascal源程序,用的是非递归的算法,可以交流一下。
 
发表
 
姓名: QQ:
性别: MSN:
E-mail: 主页:
评分: 1 2 3 4 5
评论内容:
验证码:
  
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  •