•wefgef
|
 |
« : Februarie 15, 2009, 13:35:57 » |
|
Aici puteti discuta despre problema Marmelada.
|
|
|
Memorat
|
omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
|
|
|
•gabor_oliviu1991
|
 |
« Răspunde #1 : Februarie 16, 2009, 20:35:50 » |
|
am facut in felul urmator: am retinut graful prin liste de adiacenta. am facut un lee pt graf pt a determina drumul minim intre x si y. dupa care miam determinat nodurile prin care trece " drumul preferat ". am sortat valorile costurilor drumurilor, apoi intre x si y am pus primele k valori din vectorul de costuri, iar dupa am pus restul valorilor. lee(); k=1; drum[k++]=x;
for(i=x+1;i<=y;i++) if(sol[i]==k-1) drum[k++]=i; sort(c+1,c+n+1); for(i=1;i<k-1;i++) { cost[drum[i]]=c[i]; c[i]=0; } for(i=1;i<=n;i++) if(c[i]!=0) { for(j=1;j<=n;j++) if(j!=i&&cost[j]==0) break; cost[j]=c[i]; c[i]=0; } for(i=1;i<=n;i++) g<<cost[i]<<"\n"; in vectorul c[] am retinut costurile drumurilor propuse de firma, in vectorul drum[] mi-am pus nodurile prin care trece individul pentru a ajunge din S in D (desigur drumul minim), iar in cost[] am construit solutia. ce gresesc? multumesc anticipat
|
|
« Ultima modificare: Februarie 16, 2009, 20:41:14 de către gaboru corupt »
|
Memorat
|
|
|
|
•gabitzish1
|
 |
« Răspunde #2 : Februarie 16, 2009, 20:52:28 » |
|
E ok ideea, dar mi se pare cam aiurea ce ai implementat tu acolo. drum[k++]=x;
for(i=x+1;i<=y;i++) if(sol[i]==k-1) drum[k++]=i; Drumul tau incepe cu nodul x, se termina cu y iar intre ele sunt noduri K (x < K < y). Cum functioneaza daca drumul minim de la 3 la 4 trece prin nodurile 1 2 5 6 7 ? ... nici ce e mai jos nu sunt sigur ca e bine.
|
|
|
Memorat
|
|
|
|
•Mishu91
|
 |
« Răspunde #3 : Februarie 16, 2009, 20:56:23 » |
|
Am impresia ca tu afisezi practic costurile, iar in enunt iti cere indicele costului respectiv
|
|
|
Memorat
|
|
|
|
•gabor_oliviu1991
|
 |
« Răspunde #4 : Februarie 16, 2009, 21:26:31 » |
|
m-a cam bagat in ceata problema asta... bun, dupa ce am facut "lee"-ul (ca, cica nu ii zice asa  ), cum as putea sa determin drumul min de la x la y?... in sol[] am facut lee-ul. pt exemplul de la prob, dupa executia lee(); vectorul sol[] imi arata: 0 1 1 2 ... adik pornesc din x (care e egal cu 0), si merg pana la y. pot trece prin nodurile 2 sau 3 deoarece sol[2] si sol[3] sunt egale cu nodul actual (nodul x) + 1. dupa care urmatorul nod este 4, aflat la distanta 2 fata de nodul x. deci drumurile mele pot fi 1 2 4 sau 1 3 4. as putea retine muchiile intr-o structura si dupa sa iau fiecare pereche din drum[], adik muchiile (1,2) si (2,4), pentru primul drum (1->2-> 4) si sa atribui unui camp al structrii primele K costuri, K fiind numarul de muchii care leaga X de Y? Sincer, nici ce trebuie afisat nu prea am inteles. Eu pe linia i afisam costul de la i la i+1 (pt i=n afisa costul de la nodul n la nodul 1)...cam nelamurit totusi 
|
|
|
Memorat
|
|
|
|
•stocarul
|
 |
« Răspunde #5 : Februarie 16, 2009, 21:53:25 » |
|
totusi....eu nu cred k e nevoie de lee (oricine ar fi) .....ci de o simpla parcurgere in latime din unul din cele doua noduri care marginesc drumul favorit.
|
|
|
Memorat
|
|
|
|
•gabor_oliviu1991
|
 |
« Răspunde #6 : Februarie 16, 2009, 22:05:56 » |
|
totusi, determinarea drumului minim intre X si Y l-am facut ok?
|
|
|
Memorat
|
|
|
|
•zbarni
Strain
Karma: 3
Deconectat
Mesaje: 23
|
 |
« Răspunde #7 : Februarie 16, 2009, 22:15:36 » |
|
Pai poti sa faci parcurgerea in latime cu lee (ii cam acelasi lucru). Determinarea drumului minim l-ai facut bine, pe pozitia i din sol[] pui nodul din care ai ajuns in i, adica din nodul sol ai ajuns pe parcursul parcurgerii in nodul i. Eu am numerotat muchiile, si am adaugat in sol[] numarul muchiei prin care am ajuns din sol in i. Ai grija sa numerotezi costurile inainte sa le sortezi, pentru ca cere numarul de ordine (indicele) al costului atribuit fiecarei muchii, si nu costul acesteia. Sper sa te ajute 
Totusi, primesc Killed by signal la testul 3, si nu-mi dau seama de ce. Am alocat dinamic vectorii... nu cred ca e ceva de la test, pt ca am vazut ca in timpul concursului au fost si altii cu eroarea asta, insa la alte teste. 
|
|
« Ultima modificare: Februarie 16, 2009, 22:36:59 de către Zajzon Barna »
|
Memorat
|
|
|
|
•sima_cotizo
|
 |
« Răspunde #8 : Februarie 16, 2009, 22:59:32 » |
|
"Lee" si BFS sunt acelasi lucru.
In fisierul de iesire trebuie ca nodurile de pe drumul minim sa aiba lungimile in ordine crescatoare, sau asociem pur si simplu primele k lungimi celor de pe drumul minim si apoi in rest ce ramane?
|
|
|
Memorat
|
|
|
|
•gabitzish1
|
 |
« Răspunde #9 : Februarie 16, 2009, 23:48:58 » |
|
"Lee" si BFS sunt acelasi lucru.
In fisierul de iesire trebuie ca nodurile de pe drumul minim sa aiba lungimile in ordine crescatoare, sau asociem pur si simplu primele k lungimi celor de pe drumul minim si apoi in rest ce ramane?
Primarul are doua orase preferate, S si D si doreste ca dupa construirea soselelor sa existe cel mai scurt drum posibil intre cele doua orase. Daca exista mai multe solutii se poate afisa oricare dintre ele.
|
|
|
Memorat
|
|
|
|
•zbarni
Strain
Karma: 3
Deconectat
Mesaje: 23
|
 |
« Răspunde #10 : Februarie 17, 2009, 00:00:14 » |
|
E mai 'sanatos'sa afisezi in ordine crescatoare, insa nu ar trebuie sa conteze.
|
|
|
Memorat
|
|
|
|
|
•gabitzish1
|
 |
« Răspunde #12 : Februarie 17, 2009, 11:26:50 » |
|
Pentru problema asta nu sunt vizibile sursele. Nu ne putem uita peste a ta.
|
|
|
Memorat
|
|
|
|
•free2infiltrate
Strain
Karma: -25
Deconectat
Mesaje: 41
|
 |
« Răspunde #13 : Februarie 17, 2009, 13:24:23 » |
|
Scuze de neatentie [edit] Ai primit un raspuns la rugamintea ta - poti incerca daca mai ai nevoie sa trimiti mesaj personal utilizatorilor.
|
|
« Ultima modificare: Februarie 17, 2009, 14:48:55 de către Sima Cotizo »
|
Memorat
|
|
|
|
•Florian
|
 |
« Răspunde #14 : Februarie 17, 2009, 13:51:25 » |
|
for (i=1;i<=m;i++) { if (use[X[i]] && use[Y[i]] && X[i]!=Y[i]) printf("%d\n",C[lw++]); else if (S==D) printf("%d\n",C[lw++]); else printf("%d\n",C[up--]); }
Citeste cu atentie enuntul si incearca sa intelegi ceea ce trebuie afisat. Tu afisezi valorile costurilor respective, dar trebuie afisate indicele lor in vectorul initial ( in ordinea data in fisierul de intrare). S-ar putea sa fie si de la algoritm, insa nu stiu. Asta e ceea ce am observat din prima.
|
|
|
Memorat
|
|
|
|
•sima_cotizo
|
 |
« Răspunde #15 : Februarie 17, 2009, 14:52:07 » |
|
E mai 'sanatos'sa afisezi in ordine crescatoare, insa nu ar trebuie sa conteze.
Ideea era ca dupa ce am lucrat cu un map de STL (1 TLE), am incercat si alta metoda care nu imi pune numerele in ordine crescatoare pe drumul minim si iau 3 WA... Si ma indoiesc ca as fi gresit ceva in sursa.
|
|
|
Memorat
|
|
|
|
•free2infiltrate
Strain
Karma: -25
Deconectat
Mesaje: 41
|
 |
« Răspunde #16 : Februarie 17, 2009, 16:36:39 » |
|
Citeste cu atentie enuntul si incearca sa intelegi ceea ce trebuie afisat. Tu afisezi valorile costurilor respective, dar trebuie afisate indicele lor in vectorul initial ( in ordinea data in fisierul de intrare). S-ar putea sa fie si de la algoritm, insa nu stiu. Asta e ceea ce am observat din prima.
Intradevar de la asta era, am facut putine modificari si iata ca a mers  . Multumesc mult 
|
|
|
Memorat
|
|
|
|
•gabor_oliviu1991
|
 |
« Răspunde #17 : Februarie 18, 2009, 11:58:01 » |
|
am refacut cu o structura in care retin indicii costurilor pt sosele dar tot nu merge. am facut eu un test pe care imi da bine. ati putea sa-mi dati un test mai mare. 10x
|
|
|
Memorat
|
|
|
|
•gabitzish1
|
 |
« Răspunde #18 : Februarie 18, 2009, 15:37:52 » |
|
Uite un test mai mare daca crezi ca te ajuta : 20 30 12 18 1 3 1 11 1 13 2 13 3 4 4 6 5 6 5 14 5 20 6 13 6 8 6 9 7 9 8 16 9 16 9 17 9 18 10 20 10 14 12 20 13 19 14 15 15 16 16 18 2 4 2 2 6 4 15 20 18 19 14 14 2 3 54 21 43 76 3 2 6 12 439 1 34 54 12 2 3 54 21 43 76 3 2 6 12 439 1 34 54 12 mie mi'a dat 16 23 2 7 17 22 9 24 10 15 25 30 4 19 13 28 5 20 3 8 14 18 27 12 29 6 21 1 11 26
dar nu e solutie unica.
|
|
|
Memorat
|
|
|
|
•gabor_oliviu1991
|
 |
« Răspunde #19 : Februarie 18, 2009, 16:37:09 » |
|
prima problema de care ma lovesc ii ca de exemplu eu am drum de la 2 la 2. ce pun in lista de adiacenta ?
|
|
|
Memorat
|
|
|
|
•Florian
|
 |
« Răspunde #20 : Februarie 18, 2009, 17:09:49 » |
|
prima problema de care ma lovesc ii ca de exemplu eu am drum de la 2 la 2. ce pun in lista de adiacenta ?
Treci 2 in lista de adiacenta a lui 2. Cu siguranta nu o sa fie luata in calcul muchia (2->2) pt drumul minim dintre S si D, deoarece nu ar ma fi solutie optima. Deci muchia 2->2 nu are cu ce sa te dezavantajeze.
|
|
|
Memorat
|
|
|
|
•astronomy
|
 |
« Răspunde #21 : Februarie 18, 2009, 17:32:19 » |
|
Mai bine decat atat, nu pui deloc 2 in lista de adiacenta a lui 2  O muchie de la un x la x nu o sa fie niciodata intr-o solutie optima, deci poti sa nu le iei in considerare.
|
|
|
Memorat
|
|
|
|
•razyelx
Client obisnuit

Karma: 0
Deconectat
Mesaje: 82
|
 |
« Răspunde #22 : Martie 01, 2009, 15:48:49 » |
|
hm.. ceva nu e bine pe exemplul lu Bitis. Stiu ca solutia nu este unica. Dar costurile pt fiecare muchie din drum trebuie sa coincida la toti. Adik cum ai tu Bitis drumul 12->20, 20->15, 15->16, 16->8 corect ar fi sa afiseze in dreptul acestor muchii 1,1,2, respectiv 2. Si la tine parca afiseaza pt 12->20 indicele costului 2, iar pt 20->15 indicele costului 1. Sau nu conteaza asta?
|
|
|
Memorat
|
|
|
|
•gabitzish1
|
 |
« Răspunde #23 : Martie 01, 2009, 16:17:26 » |
|
Nu, Brestin... nu conteaza.. Conteaza ca drumul de la 12 la 18 sa fie cel mai scurt..nu trebuie ca indicii muchiilor sau costurile sa fie in ordine crescatoare pe drum.
|
|
|
Memorat
|
|
|
|
•ctlin04
|
 |
« Răspunde #24 : August 19, 2012, 16:52:38 » |
|
Se poate uita cineva pe sursa mea? Primesc Killed by signal 11(SIGSEGV) pe 2 teste si chiar nustiu de unde poate sa fie, adica din observatiile mele as tine sa cred ca pentru acele teste nu exista nici un drum de la S la D, dar evident nu poate fi de la asta in timp ce alte surse iau 100, dar nici parcurgerea in latime nu prea cred sa fie gresita 
|
|
|
Memorat
|
|
|
|
|