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