Informatika gyűjtemény

Egy szinttel feljebb Megoldás

2004050607080910

NézetNyomtat

Algoritmus

Az alapötlet a következő: kiválasztunk egy belső átlót, ezzel kettévágjuk a sokszöget, az átlót hozzáadjuk a háromszögeléshez, a két részre pedig rekurzív megoldjuk a problémát. Ismer tétel, hogy mindig választható belső átló.

Belső átló kiválasztása

  1. Vesszük a legbaloldalibb legalsó pontot, legyen ez $v$. ($O(n)$ lépés)
  2. A $v$ szomszédai $u$ és $w$. (Megfelelő adatszerkezettel ez konstans lépés, ügyetlenebb módszerrel $O(n)$.)
  3. Teszteljük az $uvw$ háromszöget ($O(n)$ lépés): ha nincs benne és határán pont, akkor $uw$ jó átló. Ha van belső pont, akkor a belső pontok közül az $uw$-től legtávolabbival ($v'$) jó átló lesz $vv'$.

Kettévágás

Ha az eredeti csúcsok ciklikus sorrendben $1,2,3,...,n$, a megtalált átló pedig $uw$, ahol $u, akkor a két új rész:
  • $u,u+1,u+2,...,w$
  • $w,w+1,...,n,1,2,...,u-1$
A csúcsok eredeti sorrendjét megtartva a részek csúcsainak is helyes lesz a ciklikus rendezése.

Kódok

Palincza Richárd (pascal, grafikával): pr_haromszog.pas