|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: May 2003
Messaggi: 11
|
problema dei trasporti. "ungherese"
Ho grosse difficoltà ad implementare l'algoritmo dei trasporti, ossia l'algoritmo ungherese in c o c++. Qualcuno riesce a darmi una mano?
Grazie mille in anticipo! Ciao Jan |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
se ti può essere utile...
http://mrfreedom.web.ctonet.it/TesinaRO/ung.html una spiegazione completa non ce la faccio a riscriverla, ora non ne ho il tempo (e dubito che riuscirei a essere chiaro ciao |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: May 2003
Messaggi: 11
|
Grazie mille, xò il mio era un problema un po' + pratico... nel senso che ho capito "abbastanza" l'algoritmo come funziona ma non riesco ad implementarlo in c !! Pensavo fosse molto più facile... AIUTOOO!!!
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2003
Città: Rimini
Messaggi: 2279
|
Se vuoi io l'ho fatto per l'università, esame di ricerca operativa. Funziona benissimo, calcola la matrice a caso, provato anche su matrici 7000x7000 (!), poi il pc cominciava a swappare
Ti do i dati per un bonifico... Scherzo, se vuoi te lo passo. Se vuoi un consiglio xò non scopiazzarlo, io ho imparato un casino nel programmarlo.
__________________
Gigabyte 965P-DS3 ¤ E6600@400*8 ¤ Scythe Ninja Plus Rev.B ¤ Ram 4GB ¤ HD SSD Crucial M4 128GB
Gainward 4850 Golden Sample ¤ Antec NEO 550HE ¤ CM Centurion 534 ¤ Dell Ultrasharp U2312HM Notebook Asus N551JW ¤ i7-4750HQ ¤ nVidia 960M 4GB ¤ 16GB DDR3 ¤ SSD Intel 850EVO 500GB |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Feb 2004
Città: Rimini
Messaggi: 247
|
mmmm.... anche io sono in crisi per questa cosa!!!
non è che fai la mia stessa facoltà? SdI a cesena.... c'è un po di codice anche per me?? lo so che è squallido ma tra 2 giorni ci sarebbe l'esame e non so se ci riesco... grazie
__________________
"Se per caso il C non fosse sufficiente il Vero Programmatore lavorera' in assembler, se neppure questo fosse sufficiente allora il lavoro non e' fattibile, ma la cosa e' impossibile, un Vero Programmatore in C ed assembler puo' fare TUTTO, per definizione." |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: May 2003
Città: Rimini
Messaggi: 2279
|
Ok vi passo il codice...
x khamel: studiatelo bene il codice, quando glielo fai vedere Mingozzi ti chiede un casino di roba e se non la sai ti infama! Cmq l'algoritmo è "tradotto" in C da quello delle sue dispense. MINGOZZI CI SEEEI?? (zelig docet) ![]() Vi copio/incollo anche la relazione per capire come funziona... Il programma riceve in input il numero di origini e di destinazioni, alloca dinamicamente i relativi vettori e li riempie con numeri casuali il cui massimo e minimo sono definiti dall’utente. A questo punto viene calcolata la somma delle quantità nei due vettori, se differiscono viene aggiunta un’origine o una destinazione fittizia per pareggiarle. Poi viene riempita la matrice dei costi, anch’essa con valori casuali di estremi definiti dall’utente. Il vettore u viene riempito con i valori minimi di ogni riga, i quali vengono poi sottratti alla matrice dei costi; lo stesso procedimento viene fatto con v, il vettore dei minimi di ogni colonna di c-u. Inizia quindi il procedimento del trasporto vero e proprio; le quantità vengono trasportate dalle origini alle destinazioni nei casi in cui è possibile, cioè quando nella corrispondente posizione della matrice dei costi sia presente uno 0. Le quantità trasportate nelle relative posizioni sono memorizzate nella matrice dei flussi. Poi vengono esaminate una per una le origini esposte, cioè quelle in cui sia rimasta una quantità non nulla. Su di esse viene chiamata la funzione CamminoAumentante, che riceve in input l’origine esposta e restituisce –2 se non riesce a trovare un cammino aumentante, oppure l’indice della destinazione se invece ne trova uno. La procedura aggiorna anche gli array Po e Pd, che sono i vettori dei predecessori, in questo modo: nelle posizioni con predecessore è inserito il suo indice, in quelle senza –2, in quella da cui parte scrive –1. Essa si basa su una coda (implementata con una single-linked list) nella quale vengono via via inseriti gli archi che potrebbero far parte di un possibile cammino aumentante; si provvede poi ad estrarre l’elemento in testa alla lista, i cui dati serviranno ad aggiornare i predecessori e a decidere quali altri archi considerare. A seconda del valore che CamminoAumentante ritorna, vengono svolte due operazioni diverse. Se viene trovato un cammino aumentante, viene chiamata la procedura Ricostruisci, che riceve in input gli indici dell’origine e della destinazione. Essa determina la quantità da trasportare e aggiorna di conseguenza la matrice dei flussi, l’origine e la destinazione interessate. Questa funzione parte dal vertice destinazione, e basandosi sui vettori dei predecessori precedentemente modificati, si serve di una pila (implementata con una single-linked list) nella quale inserisce tutti gli archi che fanno parte del cammino, fino ad arrivare all’origine da cui esso parte. Se invece CamminoAumentante ritorna –2, significa che non è stato possibile trovare alcun cammino. Perciò è necessario modificare la matrice dei costi, sommando o sottraendo la quantità delta ai vari elementi, a seconda della posizione che occupano rispetto agli elementi modificati nei vettori dei predecessori. Vengono modificati anche u e v, cioè le variabili duali. Terminata una delle due operazioni sopra descritte, il programma controlla se l’origine considerata è ancora esposta; in caso affermativo si riprende il ciclo considerandola nuovamente. Qualora le origini siano tutte vuote l’algoritmo termina; vengono allora calcolate le variabili primali e duali (mostrate solo se di grandezza minore a 35, per evitare confusione nella visualizzazione a schermo), e il costo primale e duale (che coincidendo danno la garanzia del buon funzionamento dell’algoritmo). Vengono anche visualizzati i vettori xo e xd (nulli al termine del procedimento), il numero di cammini aumentanti trovati, e il tempo di calcolo necessario per terminare il procedimento.
__________________
Gigabyte 965P-DS3 ¤ E6600@400*8 ¤ Scythe Ninja Plus Rev.B ¤ Ram 4GB ¤ HD SSD Crucial M4 128GB
Gainward 4850 Golden Sample ¤ Antec NEO 550HE ¤ CM Centurion 534 ¤ Dell Ultrasharp U2312HM Notebook Asus N551JW ¤ i7-4750HQ ¤ nVidia 960M 4GB ¤ 16GB DDR3 ¤ SSD Intel 850EVO 500GB |
|
|
|
|
|
#7 |
|
Junior Member
Iscritto dal: May 2003
Messaggi: 11
|
Grazie mille... cmq sono anch'io di sdi e x l'esame di giove sono nella merda... Grazie mille!!!!Ma qual'è il tuo user?
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: May 2003
Città: Rimini
Messaggi: 2279
|
Quote:
Ma che user vuoi sapere?
__________________
Gigabyte 965P-DS3 ¤ E6600@400*8 ¤ Scythe Ninja Plus Rev.B ¤ Ram 4GB ¤ HD SSD Crucial M4 128GB
Gainward 4850 Golden Sample ¤ Antec NEO 550HE ¤ CM Centurion 534 ¤ Dell Ultrasharp U2312HM Notebook Asus N551JW ¤ i7-4750HQ ¤ nVidia 960M 4GB ¤ 16GB DDR3 ¤ SSD Intel 850EVO 500GB |
|
|
|
|
|
|
#9 |
|
Junior Member
Iscritto dal: May 2003
Messaggi: 11
|
il nome del tuo account all'uni... magari ci conosciamo anche... quanti anni fa lo hai dato? Io lo devo dare giove... speriamo bene.... Ciao!
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: May 2003
Città: Rimini
Messaggi: 2279
|
Il mio account è bizzocch, faccio il 3° anno.
Cmq l'esame l'ho passato a settembre scorso (la 4^ volta che provavo!
__________________
Gigabyte 965P-DS3 ¤ E6600@400*8 ¤ Scythe Ninja Plus Rev.B ¤ Ram 4GB ¤ HD SSD Crucial M4 128GB
Gainward 4850 Golden Sample ¤ Antec NEO 550HE ¤ CM Centurion 534 ¤ Dell Ultrasharp U2312HM Notebook Asus N551JW ¤ i7-4750HQ ¤ nVidia 960M 4GB ¤ 16GB DDR3 ¤ SSD Intel 850EVO 500GB |
|
|
|
|
|
#11 | |
|
Member
Iscritto dal: Feb 2004
Città: Rimini
Messaggi: 247
|
Quote:
e contando che ho TWI/EINN sul groppone che mi porta via tutto il tempo non riuscivo a rifarlo in breve tempo da zero... grassie tante cmq il mio user è zannir e sono del 2 anno...
__________________
"Se per caso il C non fosse sufficiente il Vero Programmatore lavorera' in assembler, se neppure questo fosse sufficiente allora il lavoro non e' fattibile, ma la cosa e' impossibile, un Vero Programmatore in C ed assembler puo' fare TUTTO, per definizione." |
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: May 2003
Città: Rimini
Messaggi: 2279
|
Quote:
Io ad esempio avevo "scopiazzato" il simplesso duale, ma me lo ero studiato bene, e alla fine ho calcolato che ci avrei messo lo stesso tempo per implementarlo. Quello che porta via più tempo però è il debug, che oltre a essere spesso noioso è anche frustrante... fase che può essere evitata avendo a disposizione un programma che funziona. In bocca al lupo per RO1 allora
__________________
Gigabyte 965P-DS3 ¤ E6600@400*8 ¤ Scythe Ninja Plus Rev.B ¤ Ram 4GB ¤ HD SSD Crucial M4 128GB
Gainward 4850 Golden Sample ¤ Antec NEO 550HE ¤ CM Centurion 534 ¤ Dell Ultrasharp U2312HM Notebook Asus N551JW ¤ i7-4750HQ ¤ nVidia 960M 4GB ¤ 16GB DDR3 ¤ SSD Intel 850EVO 500GB |
|
|
|
|
|
|
#13 |
|
Member
Iscritto dal: Feb 2004
Città: Rimini
Messaggi: 247
|
ho dato una prima occhiata al programma, mi è chiaro adesso lo sistemo un po, lo divido in funzioni e gli do un'organizzata, volevo solo chiederti, forse è una domanda un po stupida, se tolgo gli if che controllano se sei in modalità debug non comprometto niente vero?
OT Vedo che sei di rimini anche tu non hai saputo della cena che abbiamo fatto una ventina di giorni fa? /OT grazie ancora se lo passo ci becchiamo i facoltà che ti offro una birra
__________________
"Se per caso il C non fosse sufficiente il Vero Programmatore lavorera' in assembler, se neppure questo fosse sufficiente allora il lavoro non e' fattibile, ma la cosa e' impossibile, un Vero Programmatore in C ed assembler puo' fare TUTTO, per definizione." Ultima modifica di khamel : 09-06-2004 alle 11:30. |
|
|
|
|
|
#14 |
|
Member
Iscritto dal: Feb 2004
Città: Rimini
Messaggi: 247
|
ok l'ho praticamente sventrato e organizzato bene, funziona ancora, i costi duali e primali coincidono quindi tutto ok...
l'unico problema è quando alla fine del programma faccio il free della memoria... a volte mi solleva un'eccezionea volte no ma le strutture dati allocate sono sempre le stesse tanto... mmm cmq penso che non sia un problema in fondo quello che deve fare lo fa...
__________________
"Se per caso il C non fosse sufficiente il Vero Programmatore lavorera' in assembler, se neppure questo fosse sufficiente allora il lavoro non e' fattibile, ma la cosa e' impossibile, un Vero Programmatore in C ed assembler puo' fare TUTTO, per definizione." Ultima modifica di khamel : 10-06-2004 alle 14:39. |
|
|
|
|
|
#15 |
|
Junior Member
Iscritto dal: May 2003
Messaggi: 11
|
khamel.... zannir.... 2° anno... esame di twi.... non sarai mica Rocco!!!! Non ci credo, guarda te!!!!Chi mi incontro sul forum!!!!
|
|
|
|
|
|
#16 |
|
Member
Iscritto dal: Feb 2004
Città: Rimini
Messaggi: 247
|
certo sono io ma non ho capito chi sei te.... senza il tuo user o il tuo nome e cognome faccio un po fatica....
Ciao
__________________
"Se per caso il C non fosse sufficiente il Vero Programmatore lavorera' in assembler, se neppure questo fosse sufficiente allora il lavoro non e' fattibile, ma la cosa e' impossibile, un Vero Programmatore in C ed assembler puo' fare TUTTO, per definizione." |
|
|
|
|
|
#17 |
|
Member
Iscritto dal: Feb 2004
Città: Rimini
Messaggi: 247
|
ehi janjan mi vorresti dire con chi ho il piacere di parlare?? mi hai messo una gran curiosità adesso... non mi immagino proprio chi tu sia anche perchè non 6 tra quelli che conosco che so che scrivono qua sul forum...
__________________
"Se per caso il C non fosse sufficiente il Vero Programmatore lavorera' in assembler, se neppure questo fosse sufficiente allora il lavoro non e' fattibile, ma la cosa e' impossibile, un Vero Programmatore in C ed assembler puo' fare TUTTO, per definizione." |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:58.




















