struktury i wskazniki

0

Witam
Mam takie o to zadanie, i nie wiem jak sie za nie zabrac. Prosze o mala podpowiedz w jaki sposob ma byc zliczana ta droga. Uzyc algorytmu rekurencyjnego czy iteracyjnego ?

Obsługa struktur danych i wskaźników (do struktur i wewnątrz nich).

Zadaniem jest, przy pomocy odopowiednich struktur danych, wczytać z pliku i
zaprezentować prostą mapę. Drugim fragmentem zadania jest prezentacja
odległości poszczególnych punktów na mapie od punktu startowego znajdującego
się w lewym górnym rogu.

Mapa składa się z pojedynczych elementów o wielkości jednego znaku na ekranie,
element może być podłogą (znak '.'), albo ścianą (znak '#'). Fomat pliku jest
następujący:

  • pierwsza linia: liczba wierszy mapy (r),
  • druga linia: liczba kolumn mapy (c),
  • kolejne r linii: poszczególne wiersze mapy, każdy o długości c.

Poszczególne komórki należy wczytać do struktury (jedna komórka - jedna struktura).
Komórki przechowują wskaźnik do wszystkich 4 swoich sąsiadów. Ponadto wszystkie
komórki są przechowywane w dwuwymiarowej tablicy (r * c) allokowanej dynamicznie.

Przykładowa struktura (można a nawet TRZEBA ją trochę zmodyfikować):
struct cell
{
struct cell *left_cell;
struct cell *up_cell;
struct cell *right_cell;
struct cell *down_cell;
int left_visited;
int up_visited;
int right_visited;
int down_visited;
char value;
};

Przykładowe pliki są w katalogu test. W ostatecznym rozwiązaniu należy wczytać
wszystkie pliki i zaprezentować wszystkie wyniki. Czyli dla każdego pliku:

  • prezentacja mapy,
  • prezentacja mapy z odlegością poszczególnych punktów podłogi od startu.
    Poruszać się można oczywiście tylko po podłodze i tylko pionowo i poziomo.
    Jeżeli do jakiegoś elementu nie można dojść to należy wypisać 0. W punkcie
    startu zawsze jest podłoga. Jeśli odległość jest większa od 9 to wyświetlamy
    tylko ostatnią cyfrę.

Dla przykładowego pliku:
3
4
....
.#.#
....

Należy wypisać:
Mapa:
....
.#.#
....
Odległości:
0123
1#3#
2345

PS. Proszę się zastanowić nad tym czy odległości będą wyznaczane zawsze tak samo,
czy będą zależne od kolejności przechodzenia elementów (czy najpierw idziemy
w prawo, lewo czy może w dół lub górę).

0

Dla najkrótszej drogi najlepiej nadaje się algorytm Dijkstry szukaj w wikipedii.
Skoro masz mieć to w tablice, to wystarczy struktura:

struct Cell
  {
    bool podloga;
    int odleglosc;
    Cell *nastepna_zmieniona; // przyda się dla algorytmu Dijkstry
  };

1 użytkowników online, w tym zalogowanych: 0, gości: 1