Toh dimmi se va bene,l'ho provato due o tre volte e mi sembra che fungacodice:#include <stdio.h> #define BYROWS 1 #define BYCOLS 0 void Perm(int** matrix,int i,int n,int permBy); void swap(int** matrix,int i,int j); int main() { int i,j; //cambiando solo questi puoi cambiare l'ordine delle matrici //identitā da permutare int nrows=3; int ncols=3; //allocazione dinamica matrice int** I = (int**)malloc(nrows * sizeof(int*)); for(i=0;i<=nrows;i++) { I[i]= (int*)malloc(ncols * sizeof(int)); } //inizializzazione come matrice identitā for(i=0;i<nrows;i++) for(j=0;j<ncols;j++) I[i][j] = (i == j) ? 1: 0; printf("Per righe:\n\n"); Perm(I,0,nrows-1,BYROWS); printf("Per colonne:\n\n"); Perm(I,0,nrows-1,BYCOLS); system("PAUSE"); } void Perm(int** matrix,int i,int n,int permBy) { int j,k; if(i==n) { for(j=0;j<=n;j++) { //basta stmapare le trasposte delle permutazioni //per riga per permutare per colonna for(k=0;k<=n;k++) if(permBy = BYROWS) printf("%d",matrix[j][k]); else printf("%d",matrix[k][j]); printf("\n"); } printf("\n"); } else for(j=i;j<=n;j++) { swap(matrix,i,j); Perm(matrix,i+1,n,permBy); swap(matrix,i,j); } } //scambia due righe void swap(int** matrix,int i,int j) { int* temp; temp = matrix[i]; matrix[i] = matrix[j]; matrix[j] = temp; }