graf potrzebny dla punktu 1' mozna w miare latwo wykonac "symulujac" "zapadanie sie" cykli. na danym grafie, poki istnieja cykle, znajduj dowolny (nie wazne jaki) cykl i sklej wszystkie wierzcholki cyklu w pojedynczy wierzcholek (usuwajac krawedzie pomiedzy zapadajacymi sie wierzcholkami, ale zachowujac wszystkie pozostale) i kontynuuj szukanie
graf ktory pozostanie na placu boju jest drzewem, ale nie spinajacym. zostana same mosty z grafu oryginalnego, sklejone tymi wierzcholkami, ktore mialy miedzy soba jakiekolwiek sciezki. aby "uzupelnic" oryginalny graf do postaci "bezmostowej" trzeba zrobic to samo co wymysliliscie - na otrzymanym grafie znalezc wierzcholki stopnia 1 i je polaczyc (czyli ceil(N/2) krawedzi).
jedyna uwaga - wierzcholki grafu otrzymanego moga sie "mapowac" na wiele wierzcholkow grafu oryginalnego z racji zapadania sie cykli. jesli chce sie okreslic nie tylko ILE ale i JAKIE krawedzie nalezy dolozyc - trzeba te wierzcholki "rozdmuchac" z powrotem i wybrac dowolne polaczenie - patrz przyklad 2
przyklad1)
wierzch: ABCDEF
kraw: AB, AC, BC, CD, AE, DF, EF
->znaleziono cykl ABC, sklej wierzcholki ABC w jeden np 'X', graf przeksztalca sie w:
wierzch: [X][X][X]DEF
kraw: [], [], [], [X]D, [X]E, DF, EF
->znaleziono cykl XDEF, sklej wierzcholki XDEF w jeden np 'Y', graf przeksztalca sie w:
wierzch: [Y][Y][Y][Y][Y][Y]
kraw: [], [], [], [], [], [], []
->nie ma wiecej cykli
wniosek: nie ma krawedzi, nie ma mostow.
przyklad2 (z rysunku drugiego)
wierzch: ABCDEF
kraw: AB, BC, CA, CD, DE, DF, EF
->cykl: ABC -> X
wierzch: [X][X][X]DEF
kraw: [], [], [], [X]D, DE, DF, EF
->cykl: DEF->Y
wierzch: [X][X][X][Y][Y][Y]
kraw: [], [], [], [X][Y], [], [], []
->brak cykli
wniosek: sa krawedzie, sila rzeczy wszystkie sa mostami. pozostala jedyna krawedz to XY. patrzac na oryginalny zestaw krawedzi mozna znalezc wszystkie mosty - z {AB, BC, CA, CD, DE, DF, EF} znajdz krawedzie rozpiete pomiedzy {XY}, czyli pomiedzy {A,B,C} a {D,E,F} czyli wszytkie mosty to CD..
*) zlozonosc pewnie okropna. ale kontrprzykladu dla "zapadania sie cykli" nie znalazlem :) jedyna 'trudnosc' to w kazdej iteracji wyszukac dowolny cykl