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;
}