Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo utilizar MATLAB para escribir un programa para una matriz de cuadrícula de nueve cuadrados

Cómo utilizar MATLAB para escribir un programa para una matriz de cuadrícula de nueve cuadrados

Resolviendo la matriz 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)

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;

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

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);

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

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,

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>

JGTPD=ones(9,9);

ForT=1

endif

endif

finalizar si

JGTPD=zeros(9,9);

NTData;

JGZ;

end while NData==0

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

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