Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182

    [C++] Gioco matrice(palazzi visibili)..non funziona..

    Posto questo esercizio...perchè ho trovato problemi nel risolverlo! Non funziona come dovrebbe...cosa sbaglio?
    Purtroppo non riesco ad allegare l'esempio..sarebbe una matrice come input d'esempio..è in pdf..


    Si consideri il seguente rompicapo illustrato dalle figure nell' allegato (che riportano, rispettivamente, una possibile istanza del gioco e la sua soluzione). Si ha una griglia quadrata NxN che rappresenta la pianta della city di una moderna città.
    In ogni casella è presente un edificio con un certo numero di piani; in ciascuna riga e colonna gli edifici sono tutti di altezza diversa: ad esempio, in una griglia 4x4 gli edifici in ogni riga o colonna sono di 10, 20, 30 e 40 piani (1-2-3-4, per semplicità); in una griglia 5x5 ci sono anche 50 piani (5, per semplicità); e così via.
    I numeri nelle caselle sui bordi grigi indicano quante costruzioni può vedere un osservatore da quella casella lungo la stessa riga o colonna. Ad esempio, nello schema riportato in figura, il “2” posizionato sul bordo sinistro della riga evidenziata, indica che un osservatore in quella posizione, guardando da sinistra verso destra, vedrebbe esattamente due grattacieli; il “3” a destra della stessa riga indica che un osservatore che guardasse la riga da destra verso sinistra ne vedrebbe esattamente tre.
    Infatti, guardando la corrispondente riga nella soluzione, abbiamo da sinistra a destra “3-4-2-1”: quindi, guardando da sinistra verso destra si vedono solo gli edifici di 30 e 40 piani (3-4), che nascondono quelli più bassi (2-1); guardando da destra a sinistra, abbiamo “1-2-4-3”, e gli edifici visibili sono quelli di 10, 20 e 40 piani (1-2-4), mentre quello di 30 piani (3) è nascosto alla vista da quello più alto (4).
    Naturalmente, gli indizi valgono nello stesso modo per ogni riga, e similmente per ogni colonna.

    Si scriva in C++ una funzione che, ricevuta in input una soluzione candidata, restituisca “true” se la soluzione è ammissibile (cioè rispetta tutti gli indizi di riga e colonna), “false” altrimenti.

    SUGGERIMENTO: La griglia (corrispondente alla parte “bianca” in figura) può essere rappresentata da una matrice di interi senza segno di dimensione NxN; gli indizi per righe e colonna (corrispondenti alla parte “grigia” in figura), invece, possono essere rappresentati da 2 matrici di interi senza segno:
    int indiziRiga[N][2], indiziColonna[N][2]. Ad esempio, nella matrice “indiziRiga”, per ogni riga “i”, l’elemento “indiziRiga[i][1]” potrebbe riportare l’indizio da sinistra a destra, e l’elemento “indiziRiga[i][2]” potrebbe riportare l’indizio da destra a sinistra; similmente si può intendere per gli indizi di colonna.
    mio codice..premetto che ho implementato solo l'osservazione da sinistra verso destra dato che la logica è uguale ma cambia solo il modo di accesso da destra-sinistra, sopra-sotto, sotto-sopra:
    codice:
    #include <iostream>
    using namespace std;
    
    const int n=4;
    
    bool verifica(int M[][n], int n, int indiziRiga[2][n]);
    
    
    int main(){
        
        int M[n][n]={{1,3,4,2},
                     {3,4,2,1},
                     {4,2,1,3},
                     {2,1,3,4}};
                     
        int indiziRiga[2][n]={{3,2,1,3},
                              {2,3,2,1}};
        
        int indiziColonna[2][n]={{3,2,1,3},
                                 {2,3,2,1}};
        
            
            if(verifica(M,n,indiziRiga))
                cout<<"ok"<<endl;
            else cout<<"no"<<endl;
        
        
        
    system("pause");
    return 0;
    }
    
    bool verifica(int M[][n], int n, int indiziRiga[2][n]){
         
         int palazzivisti=0, altezza=0;
         
             for(int i=0; i<n; i++){
                     for(int j=0; j<n; j++){
                                if(M[i][j] > altezza){                       
                                                    altezza=M[i][j];                         
                                                    palazzivisti++;  }
                     if(palazzivisti > indiziRiga[0][i])
                     return false;
                                }
    }
    
    return true;
    
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Ma "non funziona" "cosa sbaglio" non è un modo corretto di presentare la cosa.

    Chiarisci i problemi in dettaglio, altrimenti nessuno si prende la briga di fare l'esercizio completamente ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.