Il tuo codice era complessivamente corretto, ma hai aggiunto un sacco di complicazioni: ti basta una sola variabile di falsificazione e inoltre puoi uscire dal ciclo non appena l'hai settata a 0. Per uscire dal ciclo puoi aggiungerla alla condizione o usare un goto (dovendo attraversare 2 livelli). In questo caso, potendo evitare il goto, io opterei per aggiungerlo alle condizioni.
codice:void identica(int x[][3], int n){ int identica = 1; for (int i = 0; (i < n) && identica; i++) for (int j = 0; (i < n) && identica; j++) { if (j == i) { if (x[i][j] != 1) identica = 0; } else if (x[i][j] != 0) identica = 0; } if (identica) cout << "Identica" << endl; else cout << "Non Identica" << endl; }