140 likes | 261 Views
Gigel ş i Dorel. - ş mecheri de ş mecheri informaticieni -.
E N D
Gigelşi Dorel -şmecheri de şmecheriinformaticieni-
Gigel s-a mutatîntr-un oraşnou! Fiind sâmbătăsearaşiplictisindu-se acasă……el hotăraste să “îşifacăcinste” cu o bere. Pentru a se familiariza cu barurile din împrejurimi a cumpărat hartaoraşuluişi a bifatbarurilepe hartă, fiecare bar aflându-se pe câte o stradă.
Hartafiindalcătuită din M străzi de diferitelungimi, cu sensunicsi N baruri. Până la primul bar, Gigel s-a descurcat, însă de acololucrurile nu au maifost aşa simple. • A luathartaşi a început săalcătuiască un traseu care porneşte din barulîn care se afla, şiajunge la toatecelelaltebaruriîn care vrea să se cinstească.
Deşidorinţa lui de “explorare” este mare, “condiţialuifizică” nu estetocmai bună, astfelvrea să găsesască un traseuîn care sumalungimilorstrăzilorparcurse să fie minimă.
Singur nu a reuşit săgaseascadrumulcel bun. Şi cândcredea că nu mai are şanse de reuşită a auzit o voce cunoscută: -Douăberiaici , vărog! ...era Dorel, prietenul său şi, ştiind căfusesecampionpe sate la informatică, îl roagă săîl ajute. -Dorele, tu eştisalvarea mea. Ştiu că le ai cu informatica, aşa căscoate-mă din încurcaturaasta…şi dăşibereaaia, să nu zici căterefuz! -Bine, Gigele! Dar săştii cădureazamaimult de douăberi. -Ok. Dă-mi bani căfaceucinste.
-Gigele, soluţiaceamai bunăpentruproblemataarfialgoritmulluiDijkstra, un algoritm care calculeazădrumurile de cost minim de la un bar la toatecelelalte. Algoritmulporneşte de la un graforientat cu N noduri, în cazul tău baruri. De asemenea, e nevoie de un nod de start aparţinândgrafului…decibaru’ ăsta. -Dorele, pare simpludareu tot nu preaînteleg. Explică-mi maibine. -Hai ca îţiexplic, da’ maiîntâihai sămailuăm o bere căpoate aşa pricepimaibine.
-Deci, fiiatent la desen, ăstaeste un graforientat, iar un graforientateste (G) o perecheordonata de mulţimi (X,U), unde X este o mulţimefinităşi nevidă de elemente , iar U o mulţime de perechiordonateformate cu elementedistincte din mulţimea X. Săzicem cătoateasteasuntbarurileşistrăzile din oraş. Tu eşti in barul A şivrei săajungi cât mairepede la toatecelelaltebaruri.
Uită-te la următorultabel: Tabloul D are câte o intrarepentrufiecare nod al grafului, corespunzândlungimiidrumului minim de la barul A până la respectivul bar. Numim drum o succesiune de noduri care au proprietatea căoricarearfiidouănodurisuccesiveelesunt legate printr-un arc. Astfel, drumul minim de la A la A nu teinteresează (-), drumul minim de la A la F are lungimea 4, drumul minim de la A la H nu există (∞) şi aşa maideparte.
-Aha…cred că am priceput. -Da? Hai săte văd! Vreau ca tu săfaciprogramulîn MinGW. Promit cămaidau o beredacăreuşeşti. -Aaa…păice nu face omu’ pentru o bere? Da’ lasă-mă să măconcentrez…
Gigele, nu uitapunctul şi virgula! Deci…euscriupe hârtieşituîmi zicidacăgreşesc. -BineGigele. Cum vreitu. -Fiiatent: #include<iostream.h> #include<fstream.h> const int max=15000; int c[20][20],d[20],t[20],p[20],n,m,s; ifstream f("date.in"); ofstream g("date.out"); void citire() { inti,j,x,y,cost; f>>n>>m; for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(i==j) c[i][j]=0; else c[i][j]=max else c[i][j]=max; for(i=1;i<=m;i++) { f>>x>>y>>cost; c[x][y]=cost; } }
void pr(int s){ inti,j,k,min; for(i=1;i<=n;i++) { d[i]=c[s][i]; if(i!=s && d[i]!=max) t[i]=s; } p[s]=1; for(k=1;k<n;k++) { min=max; for(i=1;i<=n;i++) if(!p[i] && d[i]<min) { min=d[i]; j=i; } for(i=1;i<=n;i++) if(!p[i]) if(d[i]>d[j]+c[j][i]) { d[i]=d[j]+c[j][i]; t[i]=j; } p[j]=1; }} Gigeleee, parantezaGigele! void drum(inti) { if(t[i]) drum(t[i]); g<<i<<" "; } void main() { citire(); f>>s; pr(s); for(inti=1;i<=n;i++) if(i!=s if(i!=s) {g<<s<<"->"<<i<<": "; drum(i); g<<"="<<d[i]<<endl; } }
Gigela terminatîn sfârşit problema, însă afarăsoareleapare, parcămahmur, pecer. -Pfoa!!! Şireuşisem să-idau de cap. -Lasă,Gigele, cămai e şi mâine o zi! Te aştept tot aici, că nu ştiu dacă mai ajung acasă. -Ai dreptate…măcar ştiu cum săprocedez de acumînainte. -Păida! Vezi că e şiinformaticaasta bună la ceva? -Săştii că e. Hai sămergemacasă. -Hai! Da’ maiîntâi…mailuăm o bere?
Project produced by… Milotin Andrei-Cristian and Bălă Maria-Alexandra
Dar să nu îl uităm pe... Mitruţă Cosntantin-Răzvan