用pascal设计一个可以解数独的程序;

用pascal设计一个可以解数独的程序;,第1张

var

i,j,s,x,y,k,l:integer;

t:boolean;

a:array [19,19] of integer;

b,d:array [182] of integer;

st:string;

begin

for i:=1 to 9 do begin

readln(st);

for j:=1 to 9 do a[i,j]:=ord(st[j])-48;

end;

s:=0;

for i:=1 to 9 do

for j:=1 to 9 do

if a[i,j]=0 then begin

s:=s+1;

d[s]:=(i-1)9+j;

end;

k:=0;l:=0;x:=(d[1]-1) div 9+1;y:=(d[1]-1) mod 9+1;

while l<>s do begin

k:=k+1;

if k>9 then begin

if l=0 then begin

writeln('No Answer!');

halt;

end;

k:=b[l];

a[x,y]:=0;

x:=(d[l]-1) div 9+1;y:=(d[l]-1) mod 9+1;

b[l]:=0;

l:=l-1;

end

else begin

t:=true;

for i:=1 to 9 do

if a[i,y]=k then begin t:=false;break;end;

if t then

for i:=1 to 9 do

if a[x,i]=k then begin t:=false;break;end;

if t then begin

case x of

1,2,3:begin

if (y=1) or (y=2) or (y=3) then

for i:=1 to 3 do

for j:=1 to 3 do

if a[i,j]=k then t:=false;

if (y=4) or (y=5) or (y=6) then

for i:=1 to 3 do

for j:=4 to 6 do

if a[i,j]=k then t:=false;

if (y=7) or (y=8) or (y=9) then

for i:=1 to 3 do

for j:=7 to 9 do

if a[i,j]=k then t:=false;

end;

4,5,6:begin

if (y=1) or (y=2) or (y=3) then

for i:=4 to 6 do

for j:=1 to 3 do

if a[i,j]=k then t:=false;

if (y=4) or (y=5) or (y=6) then

for i:=4 to 6 do

for j:=4 to 6 do

if a[i,j]=k then t:=false;

if (y=7) or (y=8) or (y=9) then

for i:=4 to 6 do

for j:=7 to 9 do

if a[i,j]=k then t:=false;

end;

7,8,9:begin

if (y=1) or (y=2) or (y=3) then

for i:=7 to 9 do

for j:=1 to 3 do

if a[i,j]=k then t:=false;

if (y=4) or (y=5) or (y=6) then

for i:=7 to 9 do

for j:=4 to 6 do

if a[i,j]=k then t:=false;

if (y=7) or (y=8) or (y=9) then

for i:=7 to 9 do

for j:=7 to 9 do

if a[i,j]=k then t:=false;

end;

end;

if t then begin

a[x,y]:=k;

l:=l+1;

b[l]:=k;

k:=0;

x:=(d[l+1]-1) div 9+1;y:=(d[l+1]-1) mod 9+1;

end;

end;

end;

end;

for i:=1 to 9 do begin

for j:=1 to 9 do write(a[i,j]);

writeln;

end;

end

用0代表要填的数

#include <stdioh>

#include <stdlibh>

#define SIZE 9

#define get_low_bit(x) ((~x&(x-1))+1)

struct{

int left;

char num;

char try;

}board[SIZE][SIZE];

int bit2num(int bit)

{

switch(bit){

case 16:

case 256:

return 9;

基础解法

排除法(摒除法)

摒除法:用数字去找单元内唯一可填空格,称为摒除法,数字可填唯一空格称为排除法 (Hidden Single)。

根据不同的作用范围,摒余解可分为下述三种:

数字可填唯一空格在「宫」单元称为宫排除(Hidden Single in Box),也称宫摒除法。

数字可填唯一空格在「行」单元称为行排除法(Hidden Single in Row),也称行摒除法。

《KS数独思维》百度网盘免费下载

链接:>pwd=1234

提取码:1234

很多家长都有这样的疑问,如何才能让孩子学好数学,其实,学习数学不仅仅是算术,而是逻辑推理能力的培养,数独是公认的提升加强孩子逻辑推理最有效的方法,通过玩数独,孩子不但收获了严密的逻辑思维,还享受了提升了数感和逻辑推理带来的快乐,通过系统的思维训练,让孩子变得更聪明、更专注、更仔细,思维能力更强~~让孩子拥有走的更远的能力。

文件目录

01数独的起源avi

02发现身边有趣的数独元素avi

03逻辑思维线avi

04数独王国中千姿百态的数独之花avi

05漏漏avi

06多多avi

07顺顺avi

08追踪avi

09神奇的小尾巴avi

10六宫变型数独avi

11宫内排除法avi

12行列排除法avi

13区块排除法avi

14唯余法avi

以上就是关于用pascal设计一个可以解数独的程序;全部的内容,包括:用pascal设计一个可以解数独的程序;、基于SAT的数独游戏求解程序,求C语言代码、什么是数独怎么玩等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9719701.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存