¡El Sudoku ha entrado en un período de cuello de botella y busca soluciones!
Cálculo del programa. Sólo existe una única solución a este problema.
Código adicional:
escriba x9
entero(1):: a
entero(1):: s(9)
entero(1):: np
tipo final
tipo(x9):: kk(9, 9)
datos kka/?
0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 3, amp;
0, 0, 0, 0, 6 , 0, 8, 0, 5, 0, amperio
8, 0, 7, 0, 3, 0, 6, 0, 0, amperio
0, 0 , 0, 0, 1, 0, 0, 9, 7, 0, amperio
0, 5, 0, 9, 6, 3, 0, 2, 0, amperio;
0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 8, amp;
0, 0, 5, 0, 0, 2, 0, 0, 4, 0, 7, y
0, 8, 0, 0, 3, 0, 0, 9, 0, 0, 0, y
1, 0, 0, 4.0, 0, 0, 0, 0 /
kknp=-kka
hacer i=1, 9
hacer j=1, 9
? kk(j,i)s=0
? si(kk(j,i)np.eq.0) entonces
?) entonces
?do k=1,9
do il=1,9
if(kk(il,i)a.eq.k) salir p>
fin de do
if(il.le.9) ciclo
do ih= 1, 9
if(kk(j,ih )a.eq.k) salir
fin de hacer
if(ih.le.9) bucle
ni=((i 2)/3- 1)*3 1
nj=((j 2)/3-1)*3 1
hacer ih= ni, ni 2
hacer il =nj, nj 2
?if(kk(il,ih)a.eq.k) salir
end do
if(il.le. nj 2) salir
fin de hacer
if(ih.le.ni 2) ciclo
if(il.if(il. le.nj 2) ciclo
kk(j,i)s(k)=k
? fin de
? kk(j,i)s(1)=kk(j,i)a
?end if
end do
end do
n=1
kka=0
kknp=0
m=0
hacer mientras(.true.)
if(n.gt.81) salir
i=( n 8)/9
j=n-9*(i-1)
kk(j,i)np=kk(j,i)np 1
k=kk(j,i)np
if(k.gt .9) entonces
? if(n.eq.1n=n-1
? ciclo
else
? kk( j,i)
a=0
terminar si
if(kk(j,i)s(k).eq.0) entonces
?ciclo
else
* do ih=1, i
* if(kk(j,ih)a.eq.kk(j,i)s(k)) salir
* end do
* if(ih.le.i) ciclo
?do il=1, j
? (kk(il,i)a.eq.kk(j,i)s(k)) exit
? end do
?
? ni=((i 2)/3-1)*3 1
?nj=((j 2)/3-1)*3 1
? hacer ih=ni, i
? hacer il=nj, nj 2
if(kk(il,ih)a.eq.kk(j,i) s(k)) salir
? fin hacer
? if(il.le.nj 2) salir
?fin hacer
? if(il.le.nj 2) ciclo
? if(ih.le.i) ciclo
? )s(k)
? si(n.eq.81) entonces
?) entonces
?m=m 1
?write(*,'(/,2x,a,i3)') 'find = ',m
?do jj=1,9
write(*,' (1x, 9i2)') kk (1: 9, jj)a
? end do
?else
?n=n 1
?i=(n 8)/9
?j=n-9*(i-1)
?kk(j,i)np=0
?ciclo
? finalizar si
finalizar si
finalizar hacer
finalizar
?