问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2023-10-22 20:23

我来回答

4个回答

热心网友 时间:2024-10-29 07:21

var
i,j,s,x,y,k,l:integer;
t:boolean;
a:array [1..9,1..9] of integer;
b,d:array [1..82] 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.

热心网友 时间:2024-10-29 07:21

{$A+,B-,D-,E-,F-,G+,I-,L-,N+,O-,P+,Q-,R-,S-,T-,V-,X+,Y-}
{$optimization on}
{$inline on}
const
m = 324;
var
i, j, k, tot, t, min: longint;
l, r, u, d, col, rr, cc, lab: array [0..m * (9 * 9 * 9 + 1)] of longint;
map: array [1..9, 1..9] of longint;
size: array [1..m] of longint;
ch: char;
f: boolean;

procere Remove(x: longint); inline;
var
i, j: longint;
begin
r[l[x]] := r[x];
l[r[x]] := l[x];
i := d[x];
while i <> x do
begin
j := r[i];
while j <> i do
begin
Dec(size[col[j]]);
u[d[j]] := u[j];
d[u[j]] := d[j];
j := r[j];
end;
i := d[i];
end;
end;

procere Resume(x: longint); inline;
var
i, j: longint;
begin
i := u[x];
while i <> x do
begin
j := l[i];
while j <> i do
begin
Inc(size[col[j]]);
u[d[j]] := j;
d[u[j]] := j;
j := l[j];
end;
i := u[i];
end;
l[r[x]] := x;
r[l[x]] := x;
end;

procere print; inline;
var
i, j: longint;
begin
f := True;
for i := 1 to 9 do
begin
for j := 1 to 9 do
Write(map[i, j]);
writeln;
end;
end;

procere DFS;
var
x, i, j: longint;
begin
if r[0] = 0 then
begin
print;
exit;
end;
min := maxlongint;
i := r[0];
while i <> 0 do
begin
if size[i] < min then
begin
min := size[i];
x := i;
end;
i := r[i];
end;
Remove(x);
i := d[x];
while i <> x do
begin
map[rr[i], cc[i]] := lab[i];
j := r[i];
while j <> i do
begin
Remove(col[j]);
j := r[j];
end;
DFS;
if f then
exit;
j := l[i];
while j <> i do
begin
Resume(col[j]);
j := l[j];
end;
i := d[i];
end;
Resume(x);
end;

procere Insert_(x, y, i, n: longint); inline;
begin
Inc(size[i]);
Inc(tot);
rr[tot] := x;
cc[tot] := y;
lab[tot] := n;
col[tot] := i;
r[tot] := tot + 1;
l[tot] := tot - 1;
u[tot] := u[i];
d[tot] := i;
d[u[i]] := tot;
u[i] := tot;
end;

procere Insert(x, y, k, n: longint); inline;
begin
t := tot + 1;
Insert_(x, y, (x - 1) * 9 + y, n);
Insert_(x, y, 81 + (x - 1) * 9 + n, n);
Insert_(x, y, 162 + (y - 1) * 9 + n, n);
Insert_(x, y, 243 + (k - 1) * 9 + n, n);
r[tot] := t;
l[t] := tot;
end;

begin
f := False;
for i := 1 to m do
begin
l[i] := i - 1;
r[i] := i + 1;
u[i] := i;
d[i] := i;
size[i] := 0;
end;
l[0] := m;
r[0] := 1;
r[m] := 0;
tot := m;
for i := 1 to 9 do
begin
for j := 1 to 9 do
begin
read(ch);
if ch = '0' then
for k := 1 to 9 do
Insert(i, j, (i - 1) div 3 * 3 + (j + 2) div 3, k)
else
Insert(i, j, (i - 1) div 3 * 3 + (j + 2) div 3, Ord(ch) - 48);
end;
readln;
end;
DFS;
if f=false then writeln('No Answer!');
readln;
end.

热心网友 时间:2024-10-29 07:22

数独的条件是什么啊 ,同行不同,同列不同 还是…………

热心网友 时间:2024-10-29 07:22

这不是数独,第四个九宫格里无处填3
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
王奇 这个名字好不好 城建税等计入什么科目 灭火器多久保养一次 灭火器保养周期是多久? 朋友在北京想开一家超市的,请问什么地方适合?还有前期要准备什么? 恐龙宝宝漫游记之我爱我家2内容提要 我爱我家艳红为什么离婚 Faudel演唱的法语歌曲mon pays 的中文歌词,哈哈哈哈,谁有 Shy'm的Le blues de toi 歌词意思 ...那个t后面省略了什么 还有,希望能帮我翻译一下以下的歌词_百度... 地下城堡2小米版安卓APK如何下载 c++写了一个生成数独的程序,可以通过编译但没办法输出 编一个数独程序(只需要生成过程),PASCAL 好的追50分...1 空调过滤网怎么分正反面 如何打开放大镜 能飞一分钟的纸飞机怎么折?24 纯棉衣服为什么会容易变硬,用立白洗衣液可以解决这个问题吗?纯... 纯棉衣服怎么洗的,用什么洗衣液去渍更好些的 百分百的纯棉衣服要怎么洗?3 纯棉衣服怎么洗?67 纯棉衣服怎么洗的91 发电机QF(N)-3-2型号,每个字母是什么意思5 海宁热神太阳能工业有限公司怎么样? 合盘中 金星进入到天蝎最后会离婚吗1 一首英语歌,是男的唱的。 有一首英文歌曲用深沉的男音唱的 里面有“ you could... be my boy ,fill my world是哪首歌? Forever you my girl Forever be...14 求一首英文歌,男歌手,唱法有点像迈克尔杰克逊,歌词大概是be...5 我做梦梦见鬼,是在一张照片里面,我和我家人合照,那个鬼就在我...1 《我的左眼看见鬼》 最后照片是什么意思?10 pascal回溯问题(数独) 考科一有技巧吗?我刚报名,怕考不过 求有关感恩议论文的论据,着急啊101 跪求有关乐观的议论文论据71 求助!有关修养的议论文论据!!!8 有关冲动的议论文论据1 亡羊补牢为时不晚的事例21 一个手机号码注册了两个之前那个微信怎么找回来 请问我第...797 用一个手机号码注册了两个,旧的被新申请的微信替换了。请...619 一个手机号码注册了两个之前那个微信怎么找回来?517 一个手机号码注册了两个之前那个微信怎么找回来945 一个手机号注册了两个重复,怎么找回旧号290 一个手机号注册了两个要找回旧怎样找 一个手机号注册了两个重复,怎么找回旧号?44 用一个手机号码注册了两个,旧的被新申请的微信替换了。请...2 房子空置两年 物业费要交吗?具体交多少149 空置房物业费收取标准是多少?42 空置房物业费收取标准是多少239 属猴的名字里带什么字好258 EXCEL表格中,计算时间超过四位数用公式出错,