Red de conocimiento informático - Computadora portátil - programación c

programación c

Puedes usar lo siguiente como referencia

#include lt;iostreamgt;

#include lt;fstreamgt;

usando el espacio de nombres std;

struct step //Registra la información de las piezas de ajedrez en movimiento

{

int sx, sy //Registra la posición de las piezas de ajedrez antes de moverlas; piezas de ajedrez

int tx, ty; // Registra la posición de la pieza de ajedrez después de mover la pieza de ajedrez

int dir // El valor dir representa la dirección del ajedrez en movimiento; pieza

};

estructura paso mystack[100], último_paso;

char diamante[7][7];

int Left_diamond = 32;

int x, y, nx, ny, ndir, top; // El valor ndir representa la dirección, 0 representa la derecha, 1 representa hacia abajo, 2 representa la izquierda, 3 representa hacia arriba

int flag=1; // Si se encontró correctamente Signo de solución

void Init_diamond()//Definición de estilo de tablero de ajedrez

{

for( int i=0; ilt; 7; i)

{

para(int j=0; jlt; 7; j )

{

if((ilt; 2 || igt; 4)amp;amp; (jlt;2 || jgt;4));

else

{

diamante[i][j] = ' *';

}

}

}

diamante[ 3][3] = '!';

}

int Move_diamond(int y, int x, intdir)//Registro de cambios de posición de movimiento de piezas de ajedrez

{

if(diamante[y] [x] != '*')

{

devuelve 0; }

struct step temp;

switch(dir)//Algoritmo de proceso para mover piezas de ajedrez

{

caso 0: / /La posición cambia al moverse hacia la derecha

if(x 2gt; 6 ||diamond[y][x 1]!='*' || Diamond[y][x 2]!=' !')//Asegúrate de que la pieza tenga una posición para saltar a la derecha

{

return

}

diamante[y][x] =diamante[y][x 1] = '!'; //Hay piezas de ajedrez en esta posición y en posiciones adyacentes

diamante[y][x 2] =' *'; //Cuando no hay piezas de ajedrez en las otras posiciones

temp.sx = x ;

temp.sy = y;

temp. tx = x 2;

temp.ty = y; //Cambio de posición después de las fichas

p>

temp.dir = dir

mystack[top; ] =temp;

devolver 1

brea

k;

caso 1: La posición cambia al moverse hacia abajo, el contenido es el mismo que el anterior

if(y 2gt; 6 ||diamond[y 1][x]! ='*' | diamante[y 2][x]!='!')

{

devuelve 0;

}

diamante[ y][x] =diamante[y 1][x] = '!';

diamante[y 2][x] ='*';

temp.sx = x;

temp.sy = y;

temp.tx = x

temp.ty = y 2; >

temp .dir = dir;

mystack[top ] =temp

return 1

break; caso 2: izquierda La posición cambia al moverse, el contenido es el mismo que el anterior

if(x-2lt;0 ||diamond[y][x-1]!='*' || diamante [y][x-2]!= '!')

{

devuelve 0

}

diamante[y] ][x] =diamante[y][ x-1] = '!';

diamante[y][x-2] = '*'; = x;

temp.sy = y;

temp.tx = x-2;

temp.ty = y;

temp.dir = dir;

mystack[top ] =temp;

devolver 1;

romper

caso 3: La posición cambia cuando se mueve hacia arriba, el contenido es el mismo que el anterior

p>

if(y-2lt;0 ||diamond[y-1][x]!='*' || Diamond[ y-2][x]!='!')

{

return 0

}

diamante[y] [x] =diamante[y-1][x] = '!';

diamante[y-2][x] ='*'; x;

temp.sy = y;

temp.tx = x

temp.ty = y-2; temp.dir = dir;

mystack[top ] = temp;

return 1;

break

predeterminado:

p>

romper;

}

devolver 0;

}

void main()

{

// Generar una solución en un archivo de texto respuesta .txt

ofstreamanswer("answer.txt");

Init_diamond();

top = nx = ny = ndir = 0;

// Retrocede y recorre hasta encontrar una solución

> while(1)

{

if(Left_diamond == 1amp; amp; diamante[3][3] == '*')

{

descanso;

}

for(y=ny; ylt; 7; y, nx=0)

{

p>

for(x=nx; xlt; 7; x, ndir=0)

{

for(int dir=ndir; dirlt; 4; dir)

{

if(Move_diamond(y, x, dir))

{

Left_diamond--;

nx = ny = ndir = 0;

ir al siguiente paso

}

}

}

}

siguiente paso:

if(y == 7)

{

top--;

// Vuelve al paso anterior y cambia de dirección

if(top gt; = 0)

{

last_step =mystack[ arriba];

diamante[(last_step.sy last_step.ty)/2][(last_step.sx last_step.tx)/2] = '*';

diamante[last_step .sy][last_step.sx]= '*';

diamante[last_step.ty][last_step.tx]= '!';

nx = last_step.sx;

ny = último_paso.sy;

ndir = último_paso.dir 1;

Diamante_izquierdo

}

else

{

respuestalt;lt;"¡Lo sentimos, no se encontró respuesta!"lt;lt;endl;

coutlt;lt;"Lo sentimos, no hay respuesta ¡encontró!" "lt;lt;endl;

flag=0;

descanso;

}

}

}

Init_diamond();

respuestalt;lt;"La respuesta ilustrada es la siguiente:"lt;lt;endl;

for(int i= 0; ilt ; 7; i )

{

para(int j=0; jlt; 7; j )

{

respuestalt; lt;diamante[i][j]lt;lt;'';

}

respuestalt;lt;endl;

}

respuestalt;lt;endllt;lt;endl;

// Solución de salida

cout

lt;lt;"¡El siguiente es el proceso de cambio de datos de las piezas de ajedrez durante la ejecución del programa!"lt;lt;"\n";

for(int n=0; nlt;top ; n)

p>

{

coutlt;lt; "paso"lt;lt;n 1lt;lt;":"lt;lt;"\n" "Mover diamante ("lt;lt;mystack [n].sy 1lt;lt;", "lt;lt;mystack[n].sx 1lt;lt;")---gt ("lt;lt;mystack[n] .ty 1lt;lt;" ,"lt;lt;mystack[n].tx 1lt;lt;")"lt;lt;endl;

diamante[mystack[n].sy][mystack [n].sx]= '!';

diamante[(mipila[n].sy mipila[n].ty)/2][(mipila[n].sx mipila[n]. tx)/2]= ' !';

diamante[mystack[n].ty][mystack[n].tx]= '*';

coutlt;lt; "Diamantes izquierdos: "lt; lt; top-nlt; lt; endl;

for(int k=0; klt; 7; k )

{

for(int j= 0; jlt; 7; j )

{

respuestalt;lt;diamante[k][j]lt;lt;'';

}

respuestalt;lt;endl;

}

respuestalt;lt;endllt;lt;endl;

}

if(flag)

{

coutlt;lt;"¡La respuesta ilustrada se ha impreso en el archivo \"answer.txt\"! ¡Por favor, compruébalo!"lt;lt;endl ;

}

}