Ivan e Alexandre gostam de analisar o que o computador pode ou não fazer tanto para solucionar como para criar os jogos. Para o sudoku padrão (9 x 9), é relativamente simples escrever programas que resolvem todos os quadrados válidos.
Conseguem resolver todos os níveis (dificil, extremamente dificil, impossível e diabólico) com SUCESSO!!
Para adquirir os códigos de fonte em DELPHI e os algoritmo, favor dar o comentário!!
Abraço com forte pensamento!
Ivan Diesel
Software de Sudoku IA. É melhor solução do mundo! |
Listagem de algoritmo "Póssivel" em Linguagem DELPHI:
procedure TForm1.possivel; // gerar os números possíveis
var
x, y, n: integer;
s: string;
function tem_cruz(x, y, n: integer): boolean;
var
f: integer;
v: boolean;
begin
v := false;
for f := 1 to 9 do
if ((n = sud[f, y]) and (x <> f)) or ((n = sud[x, f]) and (y <> f)) then
v := true;
result := v;
end;
begin
for y := 1 to 9 do
for x := 1 to 9 do
begin
supos[x, y] :='';
s := '';
if sud[x, y] = 0 then
for n := 1 to 9 do
if (not celula(x, y, n)) and (not tem_cruz(x, y, n)) then
s := s + inttostr(n);
supos[x, y] := s;
end;
end;
var
x, y, n: integer;
s: string;
function tem_cruz(x, y, n: integer): boolean;
var
f: integer;
v: boolean;
begin
v := false;
for f := 1 to 9 do
if ((n = sud[f, y]) and (x <> f)) or ((n = sud[x, f]) and (y <> f)) then
v := true;
result := v;
end;
begin
for y := 1 to 9 do
for x := 1 to 9 do
begin
supos[x, y] :='';
s := '';
if sud[x, y] = 0 then
for n := 1 to 9 do
if (not celula(x, y, n)) and (not tem_cruz(x, y, n)) then
s := s + inttostr(n);
supos[x, y] := s;
end;
end;