Witam,
To moja pierwsza prośba do Was, od kiedy mam konto na tym forum. Proszę o pomoc, gdyż sam utknąłem i nie wiem, co dalej zrobić. Mam nadzieję, że nie zostanę wyzwany od n00bów, wyśmiany, zbanowany, etc (asdf - proszę o litość ;>)... ;)
Otóż... muszę rozwiązać pewne wydumane zadanie algorytmiczne i próbuję znaleźć punkt zaczepienia - mam kilka potencjalnych pomysłów, jakby można było podejść do problemu, lecz żaden nie wydaje mi się w pełni odpowiedni. Z góry dziękuję za wszelkie konstruktywne uwagi oraz wskazówki :)
Treść zadania przytoczę cytując: "Dany jest zbiór prostokątów na płaszczyźnie, których boki są równoległe do osi układu współrzędnych, a współrzędne wierzchołków są całkowite. Prostokąty mogą się ze sobą stykać, na siebie nachodzić, a nawet się zawierać. Takie prostokąty tworzą większe figury. Opracować algorytm liczący sumaryczny obwód powstałych w ten sposób figur." Uff... koniec.
Moje próby podejścia do problemu:
-
omiatanie/zamiatanie/miotełkowanie: próbujemy znaleźć jakąś zależność w położeniu punktów (wierzchołków tychże prostokątów) na kolejnych prostych powiedzmy pionowych (kolejne proste np. x=1, 2, 3...). Wydaje mi się to dość trudne, gdyż mogą występować - jak ja to nazywam - "dziury" w tych obszarach tworzonych przez prostokąty i nie mam pomysłu, jakby można było je odróżniać w tej metodzie od skrajnego brzegu figury.
-
"szczwany" algorytm wycinania (w miarę dodawania nowych prostokątów do listy) tych części prostokątów, które zawierają się w dotychczas dodanych (w istniejącym już obszarze) i modyfikowanie obszaru o to, co "wystaje" - problem z tym, że tracimy wszelkie informacje, które w przyszłości mogłyby spowodować utworzenie "dziury".
-
algorytm przechodzenia (ja go sobie tak nazwałem) - mamy już dodane wszystkie prostokąty do płaszczyzny i w miarę dodawania ich wyznaczaliśmy sobie powiedzmy... skrajny dolny lewy punkt. Teraz, zaczynając od tego punktu, idziemy sobie bokami prostokątów (w zależności od tego, w którym kierunku idziemy, to możemy - tak mi się wydaje - określić, czy w momencie przecięcia się boków (tam też możemy np. dodawać nowe punkty do płaszczyzny w miarę dodawania kolejnych prostokątów) iść do góry, czy skręcić, itd). No więc idziemy sobie, idziemy i w miarę tego, jak chodzimy od punktu, do punktu, to zliczamy sobie sumaryczną długość obwiedni a gdy dojdziemy do początku, to bierzemy kolejny, nieodwiedzony, punkt z jakiegoś stosu wszystkich punktów i zaczynamy zabawę od nowa. Wydaje mi się, że to rozwiązanie obejmie także te "dziury", które ewentualnie powstaną.
Innych, w miarę rozsądnych, pomysłów niestety nie mam. Proszę o uwagi, co do podanych sposobów oraz o pomoc w zdecydowaniu się na jakiś z algorytmów. Jeśli macie pomysł na jakiś lepszy, to też z chęcią wysłucham.
Chciałbym zaznaczyć, że NIE ZALEŻY mi na tym, byście za mnie rozwiązali problem, lecz proszę o pomoc w doborze algorytmu, bo brak mi doświadczenia i nie wiem, który z nich mógłby się nadawać i pozwalałby rozwiązać problem w sensownym czasie.
Z góry dziękuję :) I przepraszam za przydługi post ;)