Diferente pentru problema/bfs intre reviziile #15 si #64

Diferente intre titluri:

Parcurgere in latime
BFS - Parcurgere in latime

Diferente intre continut:

== include(page="template/taskheader" task_id="bfs") ==
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$.
Se considera un graf orientat cu $N$ varfuri si $M$ arce.
h2. Cerinta
Se cere determinarea celui mai scurt drum dintre nodurile $X$ si $Y$.
Fiind dat un nod $S$, sa se determine, pentru fiecare nod $X$, numarul minim de arce ce trebuie parcurse pentru a ajunge din nodul sursa $S$ la nodul $X$.
h2. Date de intrare
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.
Fisierul de intrare $bfs.in$ contine pe prima linie 3 numere intregi $N M S$, cu semnificatia din enunt. Urmatoarele $M$ linii contin cate doua numere $x y$, cu semnificatia ca exista arc orientat de la $x$ la $y$.
h2. Date de iesire
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.
In fisierul de iesire $bfs.out$ se vor afla $N$ numere separate prin spatiu cu semnificatia ca al $i$-lea numar reprezinta numarul minim de arce ce trebuie parcurse de la nodul $S$ la nodul $i$.
h2. Restrictii
* $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$.
* $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$.
h2. Exemplu
table(example). |_. bfs.in |_. bfs.out |
| This is some
  text written on
  multiple lines.
| This is another
  text written on
  multiple lines.
| 5 7 2
1 2
2 1
2 2
3 2
2 5
5 3
4 5
| 1 0 2 -1 1
|
h3. Explicatie
h2. Indicatii de rezolvare
...
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.
== include(page="template/taskfooter" task_id="bfs") ==
 
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") ==

Nu exista diferente intre securitate.

Diferente intre topic forum:

 
3448