Algoritmo: Determinare forma di due settori delimitate da un percorso arbitrario, e quindi riempire una

voti
2

NOTA: Questo è un problema difficile per chiunque ami problemi di logica, etc.

Considerare rettangolare griglia bidimensionale di altezza H e larghezza W. Ogni spazio sulla griglia ha un valore, sia 0 1o 2. Inizialmente, ogni spazio sulla griglia è una 0, tranne che per gli spazi lungo ciascuno dei quattro bordi, che sono inizialmente 2.

Quindi prendere in considerazione un percorso arbitrario di spazi adiacenti (orizzontalmente o verticalmente) della griglia. Il percorso inizia su una 2e termina su una diversa 2. Ogni spazio lungo il percorso è un 1.

Il percorso divide la griglia in due settori di 0spazi. C'è un oggetto che poggia su un imprecisato 0spazio. Il settore che non contiene l'oggetto deve essere riempito completamente con 2.

Definire un algoritmo che determina gli spazi che devono diventare 2da 0, dato un array (elenco) di valori ( 0, 1o 2) che corrispondono ai valori della rete, che va dall'alto verso il basso e poi da sinistra a destra. In altre parole, l'elemento di indice 0 nell'array contiene il valore dello spazio in alto a sinistra nella griglia (inizialmente 2). L'elemento all'indice 1 contiene il valore dello spazio nella griglia che si trova nella colonna di sinistra, secondo dall'alto, e così via. L'elemento in corrispondenza dell'indice H contiene il valore dello spazio nella griglia che è nella riga superiore ma secondo da sinistra, e così via.

Una volta terminato algoritmo e settore vuoto viene riempito completamente con 2s, lo stesso algoritmo deve essere sufficiente a fare lo stesso processo. Il secondo (e) tempo, il percorso è ancora prelevato da un 2a un diverso 2, attraverso spazi 0, ma la griglia è minore perché la 2s che sono circondati da altri 2s non può essere toccato dal percorso (in quanto il percorso è lungo spazi 0).

Ringrazio chiunque è in grado di capire questo per me, molto molto. Questo non deve essere in un particolare linguaggio di programmazione; infatti, pseudo-codice o semplicemente inglese è sufficiente. Grazie ancora! Se avete domande, basta lasciare un commento e io specificare ciò che deve essere specificato.

È pubblicato 15/05/2010 alle 22:07
fonte dall'utente
In altre lingue...                            


1 risposte

voti
3

Mi sembra una base di riempimento diluvio algoritmo sarebbe ottenere il lavoro fatto:

  • Effettua la scansione del array per la prima 0a trovare, e quindi avviare un riempimento da lì, riempiendo la 0regione con qualche altro numero, diciamo 3- questo etichettare uno dei tuoi "settori".
  • Una volta fatto, eseguire la scansione di nuovo per una 0, e riempi da lì, riempiendo con 4questa volta.
  • Durante entrambi i riempimenti, è possibile effettuare il check-se avete trovato il vostro oggetto o no; a seconda di quale riempie a trovarlo durante, tenere traccia di quel numero.
  • Dopo che entrambi i riempimenti sono fatto, controllare quale regione numerata aveva l'oggetto in esso - Riempi ancora una volta quella regione, di nuovo con 0questa volta.
  • Riempi l'altra regione numerata con 2, e il gioco è fatto.

Ciò funzionerà per qualsiasi configurazione di griglia, finché ci sono esattamente due 0settori che sono disconnessi l'uno dall'altro; quindi ri-applicando lo stesso algoritmo qualsiasi numero di volte è soddisfacente.

Edit: piccoli aggiustamenti, per risparmiare un diluvio-fill o due -

  • Se non trovate il vostro oggetto nel primo alluvione riempimento, si può supporre che l'altro settore ha, quindi basta ri-riempire il numero attuale con 2e lasciare l'altro settore da solo (dal momento che è già 0-filled).
  • In alternativa, se si fa trovare l'oggetto nella prima alluvione riempimento, è possibile compilare direttamente l'altro settore con 2, e poi ri-riempire il primo settore con 0.
Risposto il 15/05/2010 a 22:23
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more