Originariamente inviato da John360
scusami, comunque intendo miglioramenti visivi... non so se mi spiego, l'algoritmo è giusto però mi sembra scritto male....
Manca qualche test.
A me è venuta questa soluzione:
codice:
public static boolean isQM(int M[][]){
if( M.length != M[0].length )
return false;
int n = M.length, m = M[0].length;
int c = 0, diagpsum = 0, diagssum = 0;
// test righe e colonne
for(int i = 0; i < n; i++) {
int rowsum = 0, colsum = 0;
for(int j = 0; j < m; j++) {
rowsum += M[i][j];
colsum += M[j][i];
diagpsum += (i == j) ? M[i][j] : 0;
}
c = (i == 0) ? rowsum : c;
if ( c != rowsum || c != colsum )
return false;
}
// test diagonale principale
if ( c != diagpsum )
return false;
// test diagonale secondaria
int row = 0, col = m - 1;
while( row - col < m )
diagssum += M[row++][col--];
return c == diagssum;
}