Cómo utilizar MATLAB para escribir un programa para una matriz de cuadrícula de nueve cuadrados
Cuando estaba estudiando, leí el Youth Daily entre comidas. Cada número tiene una matriz de nueve cuadrados de 9*9. Por capricho, escribí un programa matlab para resolverlo.
Los datos de entrada son una matriz de 9*9.
La idea es determinar primero los valores que pueden aparecer en cada cuadrado de acuerdo con las reglas, primero determinar el único valor posible, realizar pruebas y luego seleccionar el cuadrado menos probable para procesar. Si eso no funciona, salga de la pila, actualice el valor y vuelva a intentarlo.
El código fuente del programa es el siguiente: (No recuerdo muchos de ellos)
función;
Inputdata=;
Datos de entrada=;
p>
Datos de entrada=;
Datos de entrada=;
xsize=tamaño(Datos de entrada=; para i=1:xsize(1) p>
tempi=Inputdata(i, 1
tempj=Inputdata(i, 2) JGZ(); tempi, tempj)=Inputdata(i, 3) ;
AllData(JGZ(tempi, tempj))=AllData(JGZ(tempi, tempj))-
JGTData( tempi, tempj, 1:9)=0;
JGTData(tempi, tempj, JGZ(tempi, tempj)) = JGZ(tempi, tempj); tempj, 10) = 1;
JGTData(tempi,tempj,11)=JGZ(tempi,tempj);
Fin
JGZ;
JGTData;
[JGZ1, JGTData1]=PDDJGT(JGZ, JGTData);
JGZ=JGZ1;
JGTData=JGTData1; p>
Determine si hay un número OK
para i=1:9
para j=1:9
si JGTData(i, j,10)==1 amp.JGTData( i, j, 11)==0 se puede determinar
JGZ(i, j)=max(JGTData(i, j, 1:9)) ;
JGTData(i, j, 11) = JGZ (i, j
fin
fin
fin); p>
JGZ;
JGTData(:,:,10);
JGTPD=zeros(9,9);
mientras max(max(JGTPD~=JGTData (:,:,10)))
JGTPD=JGTData (:,:,10);
Segundos
[JGZ1, JGTData1]=PDDJGT( JGZ, JGTData);
JGZ=JGZ1;
JGTData=JGTData1;
Determinar si hay un número que se puede determinar
para i =1:9
para j=1:9
si JGTData(i,j,10)== 1 amperio JGTData(i,j,11)==0 OK OK
si max(JGTData(i,j,1:9))gt.0 Hay un error
JGZ(i,j)=max(JGTData(i,j,1 :9));
JGTData(i, j, 11)=JGZ(i, j)
fin
fin
fin
JGZ;
JGTData(:,:10);
fin
> Agregar un valor de prueba
NTData=1
ForT=0
TFT=0; =find(JGTPD==2);
xsize=xsize(1);
mientras xsize
mientras NTDatagt;=1 amp;
NTData=1;
JGTN=1
JGTNData(JGTN,:,:) =ceros(9,9);
while max(max(JGTPD~=ones(9,9))) amp TFT==0
while max(max(JGTPD~=ones(9,9))) amp; ==0
xsize=find(JGTPD==2);
if xsize~=[]
xsize=xsize(1);
tempi=mod(xsize, 9);
if tempi==0
tempi=9
tempj=floor(xsize/9); );
else
tempj=floor(xsize/9) 1;
end
tempsize=find(JGTData(tempi, tempj,1:9)gt;0);
TData(NTData,1:4)=[tempi,tempj,(JGTData(tempi,tempj,tempsize(1))),(JGTData(tempi,tempj,tempsize (2))]; Concatenar estos valores conservando el otro valor
TAData (NTData, 1: 9, 1: 9, 1: 11) = JGTData
TAJGZ (NTData, 1); : 9, 1: 9) = JGZ;
JGZ (tempi, tempj) = TData (NTData, 3);
JGTData (tempi, tempj.1: 9) = 0);
JGTData(tempi, tempj, JGZ(tempi, tempj))=JGZ(tempi, tempj
JGTData(tempi, tempj, 10)=1; >
JGTData(tempi, tempj, 11)=JGZ(tempi, tempj)
NTData=NTData 1
TFT=0; Re Juicio
JGTPD=zeros(9,9);
while max(max(JGTPD ~=JGTData(:,:,10)))
JGTPD =JGTData(:,:,10);
Segundos
[JGZ1, JGTData1]=PDDJGT(JGZ, JGTData);
JGZ=JGZ1;
JGTData=JGTData1;
Determinar si hay un número que se puede determinar
para i=1:9
para j =1:9
si JGTData(i,j,10)==1 amp JGTData(i,j,11)==0 OK
if max(JGTData(i,j,1:9))gt;0 Hay un error
JGZ(i,j)=max(JGTData(i,j,1:9));
JGTData(i,j,11)=JGZ(i,j);
else
TFT=1; hay un error
end<; /p>
fin
fin
fin
JGZ;
JGTData(:, :,10); p>
finalizar
if min(min(JGTPD))==0
TFT=1
finalizar
; else no se puede completar
TFT=1; hay un error
end
end while
si TFT==1 sale porque hay es un error
si NTDatagt; tempj=TData(NTData, 2 );
para i=1:9
para j=1:9
JGTData(i, j, 1: 11)=TAData(NTData, i, j, 1:11);
JGZ(i, j)=TAJGZ(NTData, i, j
fin
fin p>
JGTData=TAData(NTData, 1:9, 1:9, 1:11
JGZ(tempi, tempj)=TData(NTData, 4); );
JGTData(tempi, tempj, 1:9) = 0
JGTData (tempi, tempj, JGZ (tempi, tempj)) = JGZ (tempi, tempj);
JGTData(tempi,tempj,10)=1;
JGTData(tempi,tempj,11)=JGZ(tempi,tempj);
JGTPD= JGTData(:
TFT=0;
else
JGTPD=ones(9, 9);
endif
endif
end while
JGTNData(JGTN,:,:)=JGZ;
JGTN=JGTN 1;
si TFT==1 salió debido a un error
if NTDatagt; 1
NTData=NTData-1
tempi=TData(NTData, ); p>
tempj= TData(NTData, 2);
para i=1:9
para j=1:9
JGTData(i , j, 1:11) =TAData(NTData,i,j,1:11);
JGZ(i,j)=TAJGZ(NTData,i,j);
fin
fin
JGTData=TAData(NTData, 1:9, 1:9, 1:11)
JGZ(tempi, tempj)=TData(NTData, 4
JGTData(tempi, tempj, 1:9)=0; (tempi, tempj, JGZ(tempi, tempj))=JGZ(tempi, tempj);
JGTData(tempi, tempj, 10)=1;
JGTData(tempi, tempj ,11)=JGZ (tempi, tempj);
JGTPD=JGTData(:,:,10);
TFT=0;
else p> p>
JGTPD=ones(9,9);
ForT=1
endif
endif
finalizar si
JGTPD=zeros(9,9);
NTData;
JGZ;
end while NData==0 p>
función [JGZ2, JGTData2]=PDDJGT(JGZ1, JGTData1)
juez cruzado
para i=1:9
para j= 1: 9
si JGZ1(i, j)gt; 0 tiene datos, borre estos datos del resto de los datos
para k=1: 9 cruce
si j~=k
si JGTData1(i, k, JGZ1(i, j))gt 0
JGTData1(i, k, JGZ1(i, j) ))= 0;
JGTData1(i,k,10)=JGTData1(i,k,10)-1;
fin
fin p>
end
for k=1:9 columnas
if i~=k
if JGTData1(k,j,JGZ1(i, j)) gt; 0
JGTData1(k,j,JGZ1(i,j))=0;
JGTData1(k,j,10)=JGTData1(k,j ,10) -1;
fin
fin
fin
unidad pequeña
para i1=( techo(i/3)-1)*3 1: (ceil(i/3)-1)*3 3
para j1=(ceil(j/3)-1)*3 1: (ceil( j/3)-1)*3 3
si i1~=i amp; j1~=j
si JGTData1(i1,j1,JGZ1(i,j ))gt ;0
JGTData1(i1,j1,JGZ1(i,j))=0;
JGTData1(i1,j1,10)=JGTData1(i1,j1, 10)- 1;
Fin
Fin
Fin
Fin
Fin
Fin
Fin
Fin
Fin
Fin
Fin
Fin
p>Fin
fin
JGTData2=JGTData1;
JGZ2=J
GZ1;
fin