Informatika gyűjtemény

Egy szinttel feljebb Megoldás

2004050607080910

NézetNyomtat

Algoritmus

Nyers erő avagy visszalépéses keresés

Lépkedünk a gráfon, az eddigi lépéseket egy tömbben tároljuk. Figyeljük, hogy az eddigi lépések száma nem haladta-e meg a megengedettet, továbbá azt, hogy kívánt számú lépés után nem vagyunk-e pont a célban. Bármelyik feltétel sérülésekor visszalépünk, és ha a legelső pozícióról kell visszalépni, akkor jelezzük, hogy nincs megoldás.

Egy gonosz bemenet, amin a visszalépéses keresés elvérzik

A visszalépéses kereséssel előfordulhat, hogy exponenciális sok lépés után ér csak célba. Egy tipikus rossz "gráf": az elején kettéágazik, az első ágon van egy nagy teljes részgráf, amiben nem érhető el a cél, és a második ágon van a cél. Ekkor a "BT" (back-track, visszalépéses keresés) "az idők végezetéig" a teljes részgráfban lépked, nem kapunk kivárható időn belül eredményt.

Okos algoritmus

Fehér Gábor megoldása:
  • vegyünk egy 100 hosszú boolean-tömböt, minden csúgy egy boolean
  • az algoritmus álljon lépésekből, az i. lépésben a tömb tartalma legyen a következő: azok a csúcsok legyen true-k, amikbe van i hosszú séta (sétahossz = csomópontok száma)
  • első lépésben ez csak a bejárat csúcsa
  • i-ből i+1. lépés könnyen generálható az élek mentén
  • ha a k. lépésben a kijárat true, akkor van séta
  • kicsit több adminisztrációval megkapható maga a a séta is, egy NxN-es tömb kell visszamutató pointerekkel

Kódok

Nyers erő

Deáki Soma (pascal (delphi)): vidampark.dpr
Uray János (C++): vidampark.cpp

Okosabban

Kriván Bálint (C#):Vidampark.cs