» »

stetje otokov

stetje otokov

bmozin ::

Prosil bi za pomoc, ce ima kdo idejo, kako sprogramirati to rec (v Mathematici - ni treba kode pisati, prosim samo za idejo).

Imamo matriko pozitivnih stevil (lahko si predstavljamo kot pokrajino).
Treba je izracunati stevilo otokov (nad stevilko x), torej stevilo povezanih celic, ki vsebujejo stevilo vecje od x. (matriko ze prej pretvorimo tako, da je "poplavljena").
Steje se samo gor pa dol, po diagonali ni treba.

Torej, ce je npr. matrika in x = 2,
2 3 5 2
2 4 2 6
2 2 2 2
2 7 2 2

imamo tri otoke (3-4-5, 6, 7).

Ena moznost je, da zacnemo npr. pri (1,1) in gremo desno in dol in ko pridemo do x, pristejemo stevcu 1 itd., ampak tega ne bi znal sprogramirati.

Hvala za pomoc

matjazx ::

povežeš vse elemente večje od x in prešteješ podgrafe

u Mathematici pa nebi vedu kako to implementirat

JerKoJ ::

Hmm prvo bi pretvoru matriko v binarno
Odstejes visino (npr:2) ostale elemente pretvoris v 1
Pol pa uporabis nekaksen predelan "labeling" algoritem

gres od zgoraj-navzdol, levo -desno, stevec=0:
Ko prides na 1:
ce imas levo 0 in zgoraj 0 potem stevec++ (nov otok)
ce imas levo 1 in zgoraj 0 potem stevec=stevec (stari otok)
ce imas levo 0 in zgoraj 1 potem stevec=stevec (stari otok)
ce imas levo 1 in zgoraj 1 potem stevec-- (zdruzis otoka skupaj)

na koncu matrike, ki moral imet stevilo otokov
pazi na robovih matrike (najbolje je matriko povecati in dati rob povsod 0)
mozno so sevada napake, tako da dobro testiraj

UPDATE: ne dela, ce imas "jezera" znotraj otokov - resitev je uporaba ID otokov (v primeru 1 generiras nov ID, 2,3 - vzames najdeni ID, v primeru 4 si oznacis ekvivalenco IDjev) ali pa na zacetku izvedes flood-algoritem - z 0 oznacis samo "morje" - zacnes na (povecanem!) robu oznacujes dokler je kaksen sosed (tudi po diagonali) enak iskani visini (npr: 2 v tvojem primeru).

Zgodovina sprememb…

  • spremenil: JerKoJ ()

Seadoo ::

Ideja o binarni matriki je cool. Naprej pa uporabi funkcijo, ki jo ima Mathematica vgrajeno za iskat otoke. Vsaj Matlab vem da jo ima, ker sem jo nekoč rabil. Kako se kliče pa ne vem več. Ampak pomaga že to, da veš da obstaja, samo najt je treba :D .

Našu: bwlabel link.
Out of my mind. Back in five minutes.

Zgodovina sprememb…

  • spremenilo: Seadoo ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Logaritemska enačba - ne dobim pravilne rešitve

Oddelek: Šola
112037 (1854) lebdim
»

java pomoč

Oddelek: Programiranje
211836 (1228) kr?en
»

programiranje krožek(pomoč)

Oddelek: Pomoč in nasveti
442602 (1590) Marat
»

Problem (strani: 1 2 3 415 16 17 18 )

Oddelek: Znanost in tehnologija
854118119 (111523) Ha'kiv
»

C# Iskanje besed

Oddelek: Programiranje
91668 (1518) Spura

Več podobnih tem