Come ti ho detto in precedenza, il problema sta nel riempimento nella matrice.
Guarda il tuo codice:
while(!file.eof()){
file>>mat[r][r];
r++;
}
All'inizio r = 0, dunque scrivi in mat[0][0], il che è corretto; poi incrementi r, dunque r = 1. A questo punto, quando vai a scrivere la matrice, scrivi in mat[1][1], il che è sbagliato: la posizione corretta su cui scrivere è mat[0][1] (riga 0, colonna 1).
Pertanto,
prima conti gli elementi della matrice,
poi la popoli (sempre che tu non li sappia a priori). In pratica, una cosa del genere:
/* Conto gli elementi */
int count = 0;
int temp;
while(!file.eof()){
file >> temp;
count++;
}
int n = sqrt(count); // l'ordine della matrice
/* Inserisco gli elementi nella matrice */
file.seekg(0); // Mi pongo all'inizio del file
for(int row = 0; row < n; row++)
for(int col = 0; col < n; col++)
file >> mat[row][col];
Ovviamente, se non devi fare altre operazioni, puoi benissimo stampare la matrice all'interno di quello stesso ciclo for, senza crearne un altro. Per ottimizzare ancora di più, se il tuo scopo è solo quello di stampare gli elementi del file, puoi anche evitare di creare del tutto la matrice ed utilizzare una singola variabile temporanea.. ma ripeto, questo dipende da cosa devi fare.
P.s.: sarebbe inoltre corretto inserire un controllo sulle dimensioni del file (se n >= N) dove N è quello da te definito ad inizio codice, stampa un messaggio d'errore.