Mai intai trebuie sa te autentifici.
Diferente pentru problema/bfs intre reviziile #64 si #16
Diferente intre titluri:
BFS -Parcurgere in latime
Parcurgere in latime
Diferente intre continut:
== include(page="template/taskheader" task_id="bfs") ==
Se considera un graf orientat cu $N$varfuri si$M$ arce.
Se considera un graf orientat cu $N$ noduri. Fiecare muchie a grafului are costul egal cu $1$. Se dau, de asemenea, si doua noduri $X$ si $Y$.
h2. Cerinta
Fiind dat un nod $S$, sa sedetermine,pentru fiecare nod $X$, numarul minim dearce cetrebuieparcurse pentrua ajungedin nodul sursa$S$lanodul$X$.
Se cere determinarea celui mai scurt drum dintre nodurile $X$ si $Y$.
h2. Date de intrare
Fisierul de intrare $bfs.in$ contine pe prima linie3 numere intregi$NMS$, cu semnificatia din enunt. Urmatoarele $M$ linii contin catedouanumere$xy$,cusemnificatia ca existaarc orientat de la $x$la$y$.
Fisierul de intrare $bfs.in$ contine pe prima linie $N$ $X$ $Y$, cu semnificatia din enunt. Urmatoarele $N$ linii contin cate $N$ numere, reprezentand matricea de adiacenta a grafului. Cu alte cuvinte, al $j$-lea element de pe linia $i+1$ este egal cu $1$, daca exista muchie orientata de la $i$ spre $j$, respectiv $0$ in caz contrar.
h2. Date de iesire
In fisierul de iesire $bfs.out$sevorafla$N$numereseparateprinspatiucu semnificatiaca al$i$-leanumar reprezinta numarul minim de arce cetrebuieparcursedela nodul$S$ lanodul$i$.
In fisierul de iesire $bfs.out$ va fi afisata pe prima linie lungimea celui mai scurt drum dintre nodurile $X$ si $Y$. Linia a doua va contine o insiruire de noduri, reprezentand unul din drumurile de lungime minima dintre cele doua varfuri date, separate prin cate un spatiu.
h2. Restrictii
* $2 ≤ N ≤ 100 000$ * $1 ≤ M ≤ 1 000 000$ * Daca nu se poate ajunge din nodul $S$ la nodul $i$, atunci numarul corespunzator numarului $i$ va fi $-1$.
* $2 ≤ n ≤ 100 .$ * Prin drum de la nodul $A$ la nodul $B$, se intelege o insiruire $P$ de $K$ noduri, cu proprietatile: ** $P{~1~}$ = $A$. ** $P{~K~}$ = $B$. ** Exista muchie de la $P{~i~}$ la $P{~i+1~}$, pentru orice $i$ =1, $K$ - $1$. ** $P{~i~}$ = $P{~j~}$ , $i$ == $j$. * Daca exista mai multe solutii, se poate afisa oricare.
h2. Exemplu table(example). |_. bfs.in |_. bfs.out |
| 5 7 2 1 2 2 1 2 2 3 2 2 5 5 3 4 5 | 1 0 2 -1 1
| This is some text written on multiple lines. | This is another text written on multiple lines.
|
h2.Indicatii derezolvare
h3. Explicatie
Initial, se insereaza nodul $S$ intr-o coada vida, cu costul $0$.La fiecare pas, se ia nodul din inceputul cozii, se elimina si apoi se adauga vecinii nevizitati la finalul cozii.Costul unui nod nou adaugat va fi costul nodului care l-a adaugat $+ 1$.Mai multe amanunte asupra algoritmului de parcurgere in latime ({_Breadth First Search_}) puteti gasi "aici":http://en.wikipedia.org/wiki/Breadth-first_search si "aici":http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=graphsDataStrucs2.
...
O rezolvare ce foloseste o matrice de adiacenta pentru a retine graful obtine $50$ de puncte. O solutie optima ca timp si memorie - $O(N+M)$, implementata cu ajutorul listelor de adiacenta, se gaseste 'aici':job_detail/223158?action=view-source. Un alt algoritm pentru parcurgerea unui graf este prezentat 'aici':problema/dfs. h2. Aplicatii Algoritmul de parcurgere in latime ({_Breadth First Search_}) poate fi adaptat in multe probleme. De exemplu, la problema 'Muzeu':problema/muzeu putem consideram matricea data un graf in care celulele sunt noduri, iar laturile comune dintre celule sunt muchii. La problema "CrazySwitches":http://www.topcoder.com/stat?c=problem_statement&pm=6071&rd=9812, graful este reprezentat de stari binare, iar muchiile de posibilitatea de a ne deplasa dintr-o stare in alta. Un tip mai aparte de BFS, prezent si in problema anterioara, este acela cand costurile de pe muchii sunt mici si pentru a rezolva problema folosim mai multe cozi (complexitatea fiind mai mica decat daca am folosi algoritmul 'Dijkstra':problema/dijkstra). Mai multe explicatii asupra acestui procedeu gasiti in acest 'articol':preoni-2005/runda-2/solutii, la problema 'Car':problema/car. Alte probleme ce folosesc algoritmul de parcurgere in latime in rezolvare sunt: * 'Graf':problema/graf * 'Sate':problema/sate * "Cadere":http://campion.edu.ro/problems/3/455/cadere_ro.htm * "Honest":http://campion.edu.ro/problems/3/237/honest_ro.htm * 'Padure':problema/padure == include(page="template/taskfooter" task_id="bfs") ==
== include(page="template/taskfooter" task_id="bfs") ==
Nu exista diferente intre securitate.
Diferente intre topic forum:
3448