Pagini: 1 [2]   În jos
  Imprimă  
Ajutor Subiect: 291 Roy-Floyd  (Citit de 16168 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
sima_cotizo
Nu mai tace
*****

Karma: 219
Deconectat Deconectat

Mesaje: 596



Vezi Profilul
« Răspunde #25 : Aprilie 18, 2007, 07:53:59 »

pai .. solutia e simpla ...
 aplic royfloyd ... si caut sa micsorez distantele ... in cazul in care am gasit acesi distanta... caut sa maximizez numarul de muchii in cazul in care am gasit un drum mai mic... micsorez drumul si reactolizez numarul de muchii ....

Daca vrei neaparat poti sa faci un fel de roy-floyd in O(N^2 log N) folosind dijkstra cu arbori de intervale / heapuri... dar merge O(N^3)... fii atent la dimensiunile matricii... daca e prea mica poti sa dai peste alte variabile si sa le strici... eventual rescrie toata sursa, poate e un bug greu de sesizat!
Memorat
nash
De-al casei
***

Karma: 0
Deconectat Deconectat

Mesaje: 109



Vezi Profilul
« Răspunde #26 : Aprilie 18, 2007, 08:42:32 »

 O sa o rescriu .. chestia este ca imi iese din timp .... asta ma enerveaza ... daca ar zice ca gresesc .. ar fi altceva ... insa .. iese din tim cu foarte putin ... matricea e dimensionata bine ... daca nu era .. apareau probleme de citire in afara locului unde a fost alocata .. sau aparea raspuns gresit ...
Memorat
sima_cotizo
Nu mai tace
*****

Karma: 219
Deconectat Deconectat

Mesaje: 596



Vezi Profilul
« Răspunde #27 : Aprilie 18, 2007, 19:59:16 »

O sa o rescriu .. chestia este ca imi iese din timp .... asta ma enerveaza ... daca ar zice ca gresesc .. ar fi altceva ... insa .. iese din tim cu foarte putin ... matricea e dimensionata bine ... daca nu era .. apareau probleme de citire in afara locului unde a fost alocata .. sau aparea raspuns gresit ...

Iese din timp cu foarte putin la absolut orice problema la care trimiti - asta pt ca la putin timp dupa ce depasesti iti este oprit programul Wink

Legat de dimensiuni, e posibil ca tu sa accesezi ceva in afara matricii si acel ceva sa fie din intamplare adresa vreunui indice, pe care il modifici si sa iti iasa din timp... e foarte putin probabil, dar daca altceva nu e... Whistle
Memorat
nash
De-al casei
***

Karma: 0
Deconectat Deconectat

Mesaje: 109



Vezi Profilul
« Răspunde #28 : Aprilie 18, 2007, 20:37:59 »

Cod:
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++) {
if(roymin[i][j]==roymin[i][k]+roymin[k][j])
roymax[i][j]=max(roymax[i][j],roymax[i][k]+roymax[k][j]);
else
if(roymin[i][j]>roymin[i][k]+roymin[k][j]) {
roymin[i][j]=roymin[i][k]+roymin[k][j];
roymax[i][j]=roymax[i][k]+roymax[k][j];
}
}
eu nu vad nimic ne in regula ...Neutral tu vezi ?
Memorat
sima_cotizo
Nu mai tace
*****

Karma: 219
Deconectat Deconectat

Mesaje: 596



Vezi Profilul
« Răspunde #29 : Aprilie 19, 2007, 07:05:31 »

Pare corect... am dubii daca acel max e corect, parca trebuia o  banala adunare, dar... e foarte posibil sa gresesc.

Bun, am descoperit pana acu ca for-urile merg bine... sa fie de la citire? Eu unul am citit cu scanf si am luat 100 cu n^3... si din cate stiu sunt stream-urile mai incete... pe urma daca ai facut si tu cu scanf & printf ti-as fi zis ca poate ai niste matrici mult prea mari pe care el pierde timp sa le aloce, sau daca le initializezi tu pierzi timp pretios...

 Think altceva nu stiu de la ce poate fi, dar cea mai buna rezolvare este sa il rescrii peste vreo 2 zile, dupa ce ti-a iesit din cap problema... o sa fii mai relaxat atunci  Thumb up

PS: daca vrei o sa iti dau PM cu sursa mea...
Memorat
nash
De-al casei
***

Karma: 0
Deconectat Deconectat

Mesaje: 109



Vezi Profilul
« Răspunde #30 : Aprilie 19, 2007, 08:40:03 »

matricile le-am declarat global .. deci ele sunt initializate de la inceptu cu 0 ...
citirea am facut-o cu fscanf si scierea fprintf  .... matricile .. sunt la limita  roymax[257][257] ( cu 1 mai mult .. dar .. nu cred ca asta e problema .. )
initializarea pe care o fac eu .. este legata de roymax[][] , care reprezinta numarul de muchii dintre doua drumuri ... si care pentru i!=j este 0 in rest 1 .... si o fac la citirea matricei de costuri roymin ....
in ceea ce priveste pe max() .. e corect .. daca nu ar fi .. nu mi-ar da raspuns corect ... pe 50% din teste ... pe restul mie imi iese din timp .. nu da raspuns gresit ..+ .. am folosit max() din STL .. si apoi am si implementat un max .. acelasi punctaj  ... am incercat chiar si cu un if() ...ca mam gandit ca sunt prea multe apeluri .. tot degeaba.... iese din timp
« Ultima modificare: Aprilie 19, 2007, 08:45:55 de către nash mit » Memorat
Darth_Niculus
De-al casei
***

Karma: -13
Deconectat Deconectat

Mesaje: 143



Vezi Profilul
« Răspunde #31 : Aprilie 19, 2007, 09:00:20 »

 Si totusi are dreptate sima_cotizo ... dc e max-ul ala acolo? adica ar trebui direct roymax[j] = roymax[k] + roymax[k][j];  Stiu ca n-ar trebui sa infuenteze, dar.... n-ai de unde sa stii ce se intampla daca il scoti.... (pan la urma max insemna o operatie in plus).
Memorat
sima_cotizo
Nu mai tace
*****

Karma: 219
Deconectat Deconectat

Mesaje: 596



Vezi Profilul
« Răspunde #32 : Aprilie 19, 2007, 09:08:50 »

Dubios, matricea in care ai valoarea drumului dintre doua puncte nu o initializezi cu o val foarte mare?... Eu asa stiu ca trebuie Whistle

In rest e bine... foarte ciudat... inca o data te intreb, citesti cu streamuri? Smile e foarte putin probabil sa fie de la asta... dar merita sa incerci si cu scanf...

Woops, Smile de fapt chiar trebuie nr max de laturi pe care le parcurgi... e bine asa... ar fi dubios sa fie nevoie de o rearanjare a instructiunilor de genul
Cod:
if ( lungimea e mai mica) actualizeaza lungimea si nr de muchii = 0;
if ( lungimea e egala si nr de muchii e mai mare ) actualizeaza nr muchii;
« Ultima modificare: Aprilie 19, 2007, 09:12:16 de către Sima Cotizo » Memorat
nash
De-al casei
***

Karma: 0
Deconectat Deconectat

Mesaje: 109



Vezi Profilul
« Răspunde #33 : Aprilie 19, 2007, 10:29:26 »

 Este nevoie de max() pentru ca atunci cand ai gasit un drum de aceasi lungime maximizesi numarul de muchii necesare parcurgerii drumului .. adica ei maximul dintre nr muchii actuale .. si cea noua gasita .. 

Initializarea de care vorbesti e facut la inceput ... cand se da graful .. daca intre ori si ce doau noduri se da o muchie nu mai este nevioe sa initializez cu ceva foarte mare ...

 Daca interschimbi .. nu ajungi nici unde .. am incercat Tongue
 Am mai spus .. citesc cu fscanf() si scriu cu fprintf()
« Ultima modificare: Aprilie 19, 2007, 10:37:32 de către nash mit » Memorat
sima_cotizo
Nu mai tace
*****

Karma: 219
Deconectat Deconectat

Mesaje: 596



Vezi Profilul
« Răspunde #34 : Aprilie 19, 2007, 10:52:59 »

Da, ai dreptate... n-am citit toata problema Very Happy ... daca nici una din problemele astea nu e... atunci nu stiu. Daca vrei neaparat fa dijkstra cu heapuri / arbori de intervale ... sau rescrie toata sursa. Mie mi-a mers cu n^3... daca vrei iti dau diseara pm cu sursa mea / imi dai tu cu a ta, ca sa vedem... [acum plec la scoala Sad ]
Memorat
astronomy
Nu mai tace
*****

Karma: 204
Deconectat Deconectat

Mesaje: 492



Vezi Profilul
« Răspunde #35 : Aprilie 19, 2007, 11:14:31 »

Nu se merita sa faci dijkstra cu heap sau arbori de intervale fiindca ai O(N^2) muchii. Nu imi dau seama de iei TLE, poate ai pus matricile alea pe long long? (merge mai incet long long si int e de ajuns)
Memorat
nash
De-al casei
***

Karma: 0
Deconectat Deconectat

Mesaje: 109



Vezi Profilul
« Răspunde #36 : Aprilie 19, 2007, 11:55:39 »

 Gata .. acum merge .. intradevar .. aveam declarata matricea de elemente long long .. eu citisem ca fiecaer muchie are lunfimea intre 1 si 100 000 si de fapt scria ca fiecare drum este mai mic decat 100 000 deci ... asta era ..
         Multumesc
Memorat
DonPushme
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 1



Vezi Profilul
« Răspunde #37 : Ianuarie 03, 2008, 12:19:35 »

Cod:
roymax[i][j]=max(roymax[i][j],roymax[i][k]+roymax[k][j]);
de ce la actualizarea nularului de drumuri minime apare suma drumurilor de la "i" la "k" si de la "k" la "j" in loc sa se faca produs .... adica ..nu trebuia
Cod:
roymax[i][k]*roymax[k][j]
?
 
« Ultima modificare: Ianuarie 03, 2008, 16:40:08 de către Andrei Grigorean » Memorat
tm_radu
De-al casei
***

Karma: 16
Deconectat Deconectat

Mesaje: 140



Vezi Profilul
« Răspunde #38 : Ianuarie 05, 2008, 18:42:47 »

Nu, deoarece se cere numarul maxim de muchii ce le poate avea un drum de la i si j. Produs se foloseste, de exemplu, la numarul total de drumuri disjuncte de lungime minima de la i la j.
Memorat

Daca nu merge o preblema, depaneaz-o, si abia apoi arunci calculatoru pe geam
p1ccolino
Strain


Karma: -1
Deconectat Deconectat

Mesaje: 2



Vezi Profilul
« Răspunde #39 : Februarie 27, 2008, 19:10:09 »

Aplic roy floyd, actualizez matricea costurilor, daca am gasit drum mai mic sau daca noul drum este egal cu cel din matricea costurilor, verific daca nr de arce este mai mare si actualizez daca trebuie.
nu inteleg unde gresesc...
Cine m-ar putea ajuta? Brick wall
Memorat
samuel91
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 1



Vezi Profilul
« Răspunde #40 : Noiembrie 08, 2009, 16:45:42 »

Din ce cauza apare "Killed by signal 11(SIGSEGV)"
Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #41 : Noiembrie 08, 2009, 19:19:52 »

Citeste documentația. Probabil ieși din limitele unui vector sau ai declarat prea mult.
Memorat
hulparuadrian
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 15



Vezi Profilul
« Răspunde #42 : Februarie 23, 2010, 10:35:31 »

Mi-a tocat nervii vreo 3 ore problema asta.  :aha:In mintea mea, in loc sa calculez numarul de maxim muchii calculam numarul de drumuri de lungime minima. Trebuia sa casc ochii mai bine inainte sa ma apuc de lucru  Whistle.

PS: intra cu Roy-Floyd foarte usor in timp
Memorat
lessan
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 1



Vezi Profilul
« Răspunde #43 : Decembrie 28, 2016, 22:59:11 »

presupun ca greseala e la cum calculez lungimea maxima dar nu vad unde
Cod:
 if(i!=k && j!=k && a[i][j] >= (a[i][k]+a[k][j]))
                {
                    if(a[i][j] == (a[i][k]+a[k][j]))
                        v[i][j] = max(v[i][j],v[i][k]+v[k][j]);
                    else v[i][j] = v[i][k]+v[k][j];
                    a[i][j]=a[i][k]+a[k][j];
                }
Memorat
ioan32
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 2



Vezi Profilul
« Răspunde #44 : Mai 30, 2017, 19:28:37 »

Cine poate lasa o solutie la problema ?
Memorat
ioan32
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 2



Vezi Profilul
« Răspunde #45 : Mai 30, 2017, 19:28:56 »

Cine poate lasa o solutie la problema ?
Memorat
Pagini: 1 [2]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines