No non intendo la trasposta, ma proprio il risultato di una rotazione verso destra o verso sinistra...cioè non saprei come spiegarlo, ma è semplice...anche perchè la matrice rappresenta lo schema di un labirinto, quindi ci sono uni e zeri(o comunque dei numeri), e per rotazione vuol dire che se la matrice è:

0 1 2 3
4 5 6 7
8 9 0 1

il risultato di una rotazione verso destra sarebbe:

8 4 0
9 5 1
0 6 2
1 7 3

Ma fortunatamente il problema non è questo, cioè la rotazione me la fa perfettamente e così il riempimento dell' array r...

Il main è il seguente:

int main(){
int l, h, s, i, j;
char mode[3], **matrice;

// Fase di acquisizione input

scanf("%s", mode);
scanf("%d%d", &l, &h);
scanf("%d", &s);

// Allocazione memoria per matrice labirinto

matrice=nuova(l, h, matrice);

// Riempimento matrice labirinto

for (i=0; i<h; i++){
for (j=0;j<l;j++){
scanf("%s", &matrice[i][j]);
}
}

// Risolvi labirinto

destra(l, h, matrice);

// Stampa soluzione

printf("\n\n\n%s\n", mode);
printf("%d %d\n", l, h);
printf("%d\n", s);
soluzione(l, h, matrice);
azzera(h, matrice);

return 0;
}
e la funzione che definisce la matrice è:

char** nuova(int l, int h, char **p){
int i, j;
p=(char **) malloc( h * sizeof(char *));
for (i=0; i<h; i++){
p[i]=(char *) malloc( l * sizeof(char));
}
return p;
}