Wątek przeniesiony 2014-08-05 21:11 z C/C++ przez Shalom.

Sciezki w macierzy

0

Witam,
mam tego typu zadanie na wyjsciu dostaje macierz postaci:
wysokosc , szerokosc, macierz

 8 8
0 0 0 0 0 1 0 0 
0 1 1 1 0 1 0 0
0 1 0 2 1 2 4 5 
0 1 1 2 0 2 4 5 
0 3 3 3 3 3 3 4 
0 3 0 1 2 0 3 4 
0 3 3 3 3 3 3 0 
0 0 0 0 0 0 0 0 

Na wyjsciu mam wypisac przeksztalcona macierz w ten sposob aby znalezc prostokaty/kwadraty. liczby 0-5 oznaczaja wysokosc nad poziomem morza. Szukamy tylko zaglebien otoczonych wzgorzami.

out

........
........
..#.....
....#...
........
..####..
........
........

Poki co myslalem nad tym by szukac najkrotszej sciezki od pktu zaczepionego w prawym gornym rogu do tego pkt :). Tak by isc tylko po liczbach wiekszych lub rownych. Jakim algorytmem daloby sie to najlepiej zrobic?

0

Nie rozumiem twojego pomysłu. A do tego zadania wystarczy puszczać sobie BFSa.

0

W jaki sposob dostosowac BFSa do tego zadania? Moglbys rozszerzyc swoja mysl?

0

No odpalasz sobie BFSa z każdego 0 w taki sposób że "rozchodzisz się" tylko jak trafiasz na inne 0 i sprawdzasz czy doszedłeś tym BFSem do krawędzi macierzy czy nie. Jeśli nie, to znaczy że znalazłeś swoje 0 otoczone innymi liczbami i możesz wszystkie oznaczone w tym BFSie 0 zamienić na #.

0

Hmm... nie dokonca rozumiem co masz na mysli mowiac "rozchodzisz" a co gdy mam macierz:

00000
03330
03230
03230
00000

Szukajac tylko 0 zwroci nam

.....
.....
.....
.....
.....

A powinien:

.....
.....
..#..
.....
.....
0

A to może łaskawie opiszesz dokładnie jakie jest polecenie? Bo nie do końca rozumiem jakie jest kryterium w takim razie. U góry pokazałeś przykład że

3 3 3 3 3 3
3 0 1 2 0 3
3 3 3 3 3 3

Ma nam zwrócić cały środek jako #, ale przecież ta 1 i 2 nie są wcale otoczone górkami. Więc jak to jest? A w tym twoim przykładzie to w ogóle nie rozumiem czemu niby zwraca #"' za tą jedna 2skoro sąsiaduje ona z inną2'' więc wcale nie jest otoczona górkami...

Niemniej jednak mój sposób z BFSem zadziała i tak. Puszczasz z każdego kolejnego węzła i rozchodzisz się tylko jeśli węzeł sąsiadujący jest mniejszy lub równy aktualnemu. Reszta analogicznie.

Przez "rozchodisz" rozumiem dodanie kolejnego węzła do kolejki w BFSie. Jeśli trafiam na element większy to nie dodaje go już do kolejki.

0

Mamy wyszukac tereny otoczone "pagorkiem" niekoniecznie musza to byc 0 i teren nie odnosi sie tylko do 1 pola a do kilku. Dlatego

 3 3 3 3 3 3
3 0 1 2 0 3
3 3 3 3 3 3

0 1 2 0
Jest otoczone wyzszym terenem. A w moim przykladzie popelnilem blad. Na dole zamiaast 2 powinna byc 3 ofc.
Dla tego przykladu odpalam BFSa dla pierwszego znalezionego 0 i szukam? Czy jak?

0

Nie nie, niekoniecznie dla 0. Dla dowolnego węzła którego jeszcze nigdy nie odwiedziłeś.

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