Alguien me puede ayudar?
Tengo que entregar mañana dia 27 de Mayo el proyecto de C y no consigo resolverlo. Ya estoy desesperada.
Como ya puse anteriormente se trata de realizar un programilla que en un tablero 8 X 8 el usuario elija la casilla inicial y la casilla final, y el programa le tiene que decir los movimientos minimos que el caballo ha de hacer para llegar.
Llevo dos semanas intentando todo lo que se me ocurre y lo mejor que he conseguido es lo que hay en el archivo adjunto.
Alguien me puede ayudar a resolver lo que me queda? Aunque solo sea una orientación, please. Por tonteria que os parezca, si teneis una idea que me pueda ayudar os lo agradeceré mucho.
NOTA: Lo envio por escrito y por arxivo
GRACIAS a TODOS.
-------------------------------------------------------------------------------------
AQUI OS ENVIO EL NUEVO CODIGO QUE HE CONSEGUIDO HACER , PERO NO TENGO NADA MAS
-------------------------------------------------------------------------------------
**************************************************************************************************************************
#include <stdio.h>
typedef int tauler[8][9];
void tauler_inici (tauler tauler1, int columna,int fila);
void tauler_matriu (tauler tauler1, int columna_ini, int fila_ini, int columna_fi, int fila_fi);
int mov (tauler tauler1, int columna, int fila);
void main()
{
char repetir='n';
do
{
tauler tauler1;
char error='n';
int columna_ini, fila_ini, columna_fi, fila_fi, moviments;
tauler_inici (tauler1, 8,;
printf ("nnDel tauler anterior diguens de quin punt a quin altre vols desplasar el caball.");
do
{
printf ("n- Columna inicial -> ");
scanf ("%d", &columna_ini);
printf ("- Fila inicial -> ");
scanf ("%d", &fila_ini);
printf ("- Columna final -> ");
scanf ("%d", &columna_fi);
printf ("- Fila final -> ");
scanf ("%d", &fila_fi);
if ((columna_ini>7)||(columna_ini<0)||(fila_ini>7)||(fila_ini<0)||(columna_fi>7)||(columna_fi<0)||(fila_fi>7)||(fila_fi<0))
{
printf ("nERROR:Entra posicions correctes del tauler!!!");
error='s';
}
}while (error=='s');
tauler_matriu (tauler1, columna_ini, fila_ini, columna_fi, fila_fi);
moviments = mov (tauler1, 8,;
printf ("nCalen %d moviments", moviments);
printf ("nVols repetir el programa? (s/n)");
scanf ("%s", &repetir);
}while (repetir=='s');
}
void tauler_inici (tauler tauler1, int columna,int fila)
{
int j, i;
printf ("nt __________________________________________________");
printf ("nt| |n");
for (i=0; i<fila; i++)
{
printf ("t| ");
for (j=0; j<columna; j++)
{
printf("[%d,%d] ", i, j);
}
printf (" |");
printf ("n");
}
printf ("t|__________________________________________________|n");
}
void mostrar_tauler (tauler tauler1, int columna,int fila)
{
int j, i;
printf ("nt __________________________________");
printf ("nt| |n");
for (i=0; i<fila; i++)
{
printf ("t| ");
for (j=0; j<columna; j++)
{
printf("[%d] ", tauler1
[j]);
}
printf (" |");
printf ("n");
}
printf ("t|__________________________________|n");
}
void tauler_matriu (tauler tauler1, int columna_ini, int fila_ini, int columna_fi, int fila_fi)
{
int j, i;
tauler1[fila_ini][columna_ini]=1;
tauler1[fila_fi][columna_fi]=2;
for (i=0; i<8; i++)
{
for (j=0; j<8; j++)
{
if ((tauler1[j]!=1)&&(tauler1[j]!=2))
{
tauler1[j]=0;
}
}
}
mostrar_tauler (tauler1, 8, ;
}
int mov (tauler tauler1, int columna, int fila)
{
int j=0, i=0, a, b, aux_i, aux_j;
char llegado='n';
int cont=0;
int verif;
do
{
for (i=0; i<fila; i++)
{
for (j=0; j<columna; j++)
{
verif=0;
if (tauler1[j]==1)
{
if ((i+2>=0)&&(i+2<=7)&&(j+1>=0)&&(j+1<=7))
{
if (tauler1[i+2][j+1]!=2)
{
if ((tauler1[i+2][j+1]!=5)&&(tauler1[i+2][j+1]!=1))
{
tauler1[i+2][j+1]=1;
verif=1;
aux_i=i;
aux_j=j;
}
}
else
{
verif=1;
llegado='s';
aux_i=i;
aux_j=j;
j=8;
i=8;
}
}
if ((i-2>=0)&&(i-2<=7)&&(j-1>=0)&&(j-1<=7))
{
if (tauler1[i-2][j-1]!=2)
{
if ((tauler1[i-2][j-1]!=5)&&(tauler1[i-2][j-1]!=1))
{
tauler1[i-2][j-1]=1;
verif=1;
aux_i=i;
aux_j=j;
}
}
else
{
llegado='s';
verif=1;
aux_i=i;
aux_j=j;
j=8;
i=8;
}
}
if ((i-2>=0)&&(i-2<=7)&&(j+1>=0)&&(j+1<=7))
{
if (tauler1[i-2][j+1]!=2)
{
if ((tauler1[i-2][j+1]!=5)&&(tauler1[i-2][j+1]!=1))
{
tauler1[i-2][j+1]=1;
verif=1;
aux_i=i;
aux_j=j;
}
}
else
{
llegado='s';
verif=1;
aux_i=i;
aux_j=j;
j=8;
i=8;
}
}
if ((i+2>=0)&&(i+2<=7)&&(j-1>=0)&&(j-1<=7))
{
if (tauler1[i+2][j-1]!=2)
{
if ((tauler1[i+2][j-1]!=5)&&(tauler1[i+2][j-1]!=1))
{
tauler1[i+2][j-1]=1;
verif=1;
aux_i=i;
aux_j=j;
}
}
else
{
llegado='s';
verif=1;
aux_i=i;
aux_j=j;
j=8;
i=8;
}
}
if ((i+1>=0)&&(i+1<=7)&&(j+2>=0)&&(j+2<=7))
{
if (tauler1[i+1][j+2]!=2)
{
if ((tauler1[i+1][j+2]!=5)&&(tauler1[i+1][j+2]!=1))
{
tauler1[i+1][j+2]=1;
verif=1;
aux_i=i;
aux_j=j;
}
}
else
{
llegado='s';
verif=1;
aux_i=i;
aux_j=j;
j=8;
i=8;
}
}
if ((i-1>=0)&&(i-1<=7)&&(j-2>=0)&&(j-2<=7))
{
if (tauler1[i-1][j-2]!=2)
{
if ((tauler1[i-1][j-2]!=5)&&(tauler1[i-1][j-2]!=1))
{
tauler1[i-1][j-2]=1;
verif=1;
aux_i=i;
aux_j=j;
}
}
else
{
llegado='s';
verif=1;
aux_i=i;
aux_j=j;
j=8;
i=8;
}
}
if ((i-1>=0)&&(i-1<=7)&&(j+2>=0)&&(j+2<=7))
{
if (tauler1[i-1][j+2]!=2)
{
if ((tauler1[i-1][j+2]!=5)&&(tauler1[i-1][j+2]!=1))
{
tauler1[i-1][j+2]=1;
verif=1;
aux_i=i;
aux_j=j;
}
}
else
{
llegado='s';
verif=1;
aux_i=i;
aux_j=j;
j=8;
i=8;
}
}
if ((i+1>=0)&&(i+1<=7)&&(j-2>=0)&&(j-2<=7))
{
if (tauler1[i+1][j-2]!=2)
{
if ((tauler1[i+1][j-2]!=5)&&(tauler1[i+1][j-2]!=1))
{
tauler1[i+1][j-2]=1;
verif=1;
aux_i=i;
aux_j=j;
}
}
else
{
llegado='s';
verif=1;
aux_i=i;
aux_j=j;
j=8;
i=8;
}
}
if (verif==1)
{
cont++;
for (a=0; a<fila; a++)
{
for (b=0; b<columna; b++)
{
if (tauler1[a]<b>==5)
{
tauler1[a]<b>=0;
}
}
printf ("n");
}
tauler1[aux_i][aux_j]=5;
mostrar_tauler (tauler1, 8, ;
}
}
}
}
}while (llegado!='s');
return (cont);
}