Tienes un bucle infinito aquí:
while(des == 0){
//Tienes mas code aquí
if (matriz[i][j+3]==parte[i+3])
{
inicioa=i;
iniciob=j;
finala=i;
finalb=j+3;
des=des+1;
}
}
des solamente se incrementa cuando se cumple el condicional, o sea que si no se cumple nunca terminará de ejecutar
Esto está mal:
cout<<"Pocicion inicial:", inicioa, iniciob, "\n";
mejor haber puesto:
cout<<"Pocicion inicial: " << inicioa << iniciob << endl;
Lo siguiente no tiene sentido:
r='s';
while (r=='s')
{
}
con poder while(true){ } es más que suficiente.
Ahora:
rand()%10;
lo pones al aire, no hay nadie que lo cache