Ho appena fatto una domanda sulla competizione di programmazione e l'ho assolutamente bombardata. Ho avuto problemi fin dall'inizio stesso dalla lettura del set di input. La domanda era fondamentalmente una variante di questo puzzle link ma aveva anche un componente orario nella prima riga (diciamo 3 ore dopo l'inizio di evacuazione). Si legge così
Questo puzzle è un tributo a tutte le persone che hanno sofferto del terremoto in Giappone. L'obiettivo di questo puzzle è, data una rete di strade e luoghi, determinare il numero massimo di persone che possono essere evacuate.
Le persone devono essere evacuate dai punti di evacuazione ai punti di soccorso. Viene fornito l'elenco delle strade e il numero di persone che possono trasportare per ora.
Specifiche di input Il tuo programma deve accettare un solo argomento della riga di comando: il file di input. Il file di input è formattato come segue: la prima riga contiene 4 numeri interi nrstn è il numero di posizioni (ogni posizione è data da un numero da 0 a n-1) r è il numero di strade s è il numero di posizioni da evacuare da (punti di evacuazione) t è il numero di luoghi in cui le persone devono essere evacuati (punti di salvataggio) la seconda riga contiene numeri interi che forniscono le posizioni dei punti di evacuazione; la terza riga contiene t interi che danno le posizioni dei punti di salvataggio le linee contengono le definizioni stradali. Ogni strada è definita da 3 numeri interi l1 l2 larghezza dove l1 e l2 sono le posizioni collegate dalla strada (le strade sono a senso unico) e la larghezza è il numero di persone all'ora che può stare sulla strada
Ora guarda il set di input di esempio
5 5 1 2 3
0
3 4
0 1 10
0 2 5
1 2 4
1 3 5
2 4 10
Il 3 nella prima riga è il componente aggiuntivo ed è definito come il numero di ore da quando è iniziato il resuce, che in questo caso è 3.
Ora la mia soluzione era usare l'algoritmo Dijisktras per trovare il percorso più breve tra ciascuno dei nodi di salvataggio ed evac. Ora il mio problema è iniziato con la lettura del set di input. Ho letto la prima riga in python e ho memorizzato i valori nelle variabili. Ma poi non sapevo come memorizzare i valori della distanza tra i nodi e cosa DS usare e come inserirlo per dire un'implementazione standard dell'algoritmo dijikstras.
Quindi la mia domanda è due volte 1.) Come prendo l'input di tali problemi? - Ho affrontato questo problema recentemente in alcune competizioni e spero di poter ottenere un semplice frammento di codice o una spiegazione in java o python per leggere il set di input dei dati in modo tale da poterlo inserire come algoritmo grafico / grafico come dijikstra e floyd / warshall. Anche una soluzione al problema precedente sarebbe di aiuto.
2.) Come risolvere questo enigma? Il mio algoritmo era:
Trova il percorso più breve tra i punti evac (nell'esempio sopra riportato è 14 da 0 a 3) Moltiplicalo per numero di ore per ottenere il numero massimo di salvataggi Anche la risposta data per la variante per il set di input era 24 che non capisco. Qualcuno può spiegarlo anche.
UPDATE:
Ottengo come la risposta è 14 nel link problema dato - sembra essere solo il percorso più breve tra i nodi 0 e 3. Ma con il componente 3 ore come è la risposta 24
UPDATE
Ho capito com'è 24 - è un traversal grafico completo ad ogni ora e questo è il modo in cui lo risolvo
Hour 1
Node 0 to Node 1 - 10 people
Node 0 to Node 2- 5 people
TotalRescueCount=0
Node 1=10
Node 2= 5
Hour 2
Node 1 to Node 3 = 5(Rescued)
Node 2 to Node 4 = 5(Rescued)
Node 0 to Node 1 = 10
Node 0 to Node 2 = 5
Node 1 to Node 2 = 4
TotalRescueCount = 10
Node 1 = 10
Node 2= 5+4 = 9
Hour 3
Node 1 to Node 3 = 5(Rescued)
Node 2 to Node 4 = 5+4 = 9(Rescued)
TotalRescueCount = 9+5+10 = 24
È abbastanza difficile per questo caso, per i vari evac e punti di salvataggio come posso scrivere un pgm per questo?