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 p>
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
{ p>
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(); p>
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>
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
}
}
} p>
}
siguiente paso:
if(y == 7)
{
top--; p>
// 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;
} p>
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;''; p>
}
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 ;
}
}