Ho una lista non ordinata di rettangoli e dei loro vicini su quattro lati senza origine. Come posso convertire questo in modo efficiente in una griglia?

2

Sto scrivendo un GtkGrid -come contenitore per il mio GUI library for Go , e sto provando a scrivere la parte di layout effettiva del codice.

Fondamentalmente, ho una lista non ordinata di controlli. Ogni controllo è un rettangolo e ogni voce di elenco contiene un puntatore al controllo a nord, sud, est e ovest. Quello che non so è come riconvertirlo in una griglia in modo efficiente.

All'inizio pensavo di poter usare "il controllo in alto a sinistra" per contrassegnare (0, 0) sulla griglia. Ma cos'è la parte in alto a sinistra di

[ ][ ][X]
[ ][X][X]
[X][X][X]

Qualsiasi altra soluzione a cui posso pensare corre almeno in tempo O (n ^ k), dal momento che ho bisogno di attraversare la lista più volte per capire quale sia ogni riga, ecc.

Quindi quale altro approccio posso usare? Grazie.

L'algoritmo dovrà essere in grado di iniziare da qualsiasi controllo nell'elenco. (Vai ai programmatori: la ragione è che la lista è una mappa.)

Posso dire che non ci saranno controlli indipendenti (tutti i controlli devono essere collegati ad un altro controllo, ma possono essere attaccati da qualsiasi lato in qualsiasi momento). (Tranne, ovviamente, se esiste un solo controllo, ma immagino che questo scenario cada fuori dalla soluzione.)

(spero che questo sia nel sottodominio giusto ...)

    
posta andlabs 31.08.2014 - 22:48
fonte

1 risposta

1

Sei sicuro di ottenere un rettangolo da qualsiasi altro? (ci sono spazi vuoti?) presumo così, altrimenti non è possibile determinare quali siano le coordinate relative per la mappa.

In tal caso, sceglierne uno arbitrariamente e fallo 0.0. Quindi diventa una semplice questione di camminare sul grafico e assegnare le coordinate. Se non hai bisogno di negativi, avrai bisogno di un secondo passaggio per spostare tutto + x / + y, ma nel caso peggiore dovrebbe essere O (n).

    
risposta data 31.08.2014 - 22:54
fonte

Leggi altre domande sui tag