Verificare che ogni elemento non nullo di una matrice appaia una volta sola

di il
3 risposte

Verificare che ogni elemento non nullo di una matrice appaia una volta sola

Buongiorno a tutti. Ho costruito una matrice quadrata nxn. devo verificare che ogni lemento non nullo di questa matrice (tutti gli elementi sono compresi tra 0 ed n) appaia una sola volta. avevo creato la seguente funzione:
bool verifyL(TwoDArray &B){
    int n = B[0].size();  
    int sr[n];
    int sc[n];
    int nr_times;
     for(int i = 0; i < n; ++i) {	
            int sum = 0;
            for(int j = 0; j < n; ++j) 
            	sum = sum + B[i][j];
            	sr[i] = sum;
            }
    
        // check that s appears n times in each row
        for(int i = 0; i < n; ++i) {
        	if (sr[i] == 0)
            nr_times = 1;
            else{	
	    for(int s = 1; s <= n; ++s) {	
			nr_times=0;
            for(int j = 0; j < n; ++j) 
                        if (B[i][j] == s)
                        nr_times++;
            }
	}
            if (nr_times != 1) return false;
        }
        
    
      for(int j = 0; j < n; ++j) {
            int sum = 0;
            for(int i = 0; i < n; ++i) 
            	sum = sum + B[i][j];
            	sc[j] = sum;
            }

        // check that s appears n times in each column
        for(int j = 0; j < n; ++j) {
        	if (sc[j] == 0)
            nr_times = 1;
            else{
            for(int s = 1; s <= n; ++s) {
            nr_times = 0;
            for(int i = 0; i < n; ++i) 
                        if (B[i][j] == s)
                        nr_times++;
            }
			}
            
            if (nr_times != 1) return false;
        }
    
  
    return true;
}
 
considerando il fatto che, se la riga (o colonna) è fatta da soli zeri, e quindi la somma dei suoi elementi è nulla, allora non mi crea alcun problema, altrimenti mi va ad increamentare un contatore nr_times e alla fine, se questo è 1, allora la verifica passa, altrimenti no.
Però quando inserisco delle matrici con degli zeri, la verifica non funziona, cioè non mi da errori ma non mi restituisce il valore vero.
Ho visto che alcuni utilizzano le map, ma non sono ben riuscita a capire come funzionano ancora e come potrei implementarle in questo caso.
Avete suggerimenti?
GRazie

3 Risposte

Devi accedere o registrarti per scrivere nel forum
3 risposte