Informatika gyűjtemény

Egy szinttel feljebb Megoldas

2004050607080910

NézetNyomtat

Algoritmus

Először felépítünk egy élistát a Prüfer-kód alapján, majd minden csúcsból kiszámoljuk a tőle legtávolabbi pont távolságát, és ezen értékek maximumaként kapjuk az átmérőt.

Éllista felépítése a Prüfer-kód alapján

Egyesével végigmegyünk a kód elemein. Kezdetben egy H halmazban tároljuk azokat a csúcsokat, melyek nem szerepelnek a kódban. (Ilyen biztos létezik, mert a kód kettővel rövidebb, mint a csúcsok száma.) Egy lépésben H legkisebb eleme, és a kód következő elemének megfelelő csúcs között húzunk be élet, majd a legkisebb elemet töröljük a halmazból, és a kódnak töröljük az első elemét.
Ezután H-t újraszámoljuk, de olyat már nem rakunk be, amit egyszer kivettünk.
A kód végigolvasása során $N-2$ élet behúzunk, végül az N címkéjű csúcsot is a kód utolsó elemének megfelelő csúccsal kötjük össze.

Átmérő meghatározása éllista alapján

Minden pontból mélységi bejárást csinálunk, amiben visszaadjuk a mélységet, így megkapjuk az adott ponttól legtávolabbi pont távolságát. Az összes mélység közül a legnagyobb kell.

Kódok

Peregi Tamás, (pas): pt_prufer.pas
Mezei Tamás, (C#): mt_prufer.cs
Kriván Bálint, (C#): kb_prufer.cs