Olen yrittänyt ratkaista seuraavaa ongelmaa jo hieman pidempään. Eli minulla on taulukko esim. BOARD(20,20). Olen täyttänyt taulukon randomilla erilaisilla palikoilla, joiden arvo on 1-5. Ja nyt jos hiirellä valitaan vaikka kohta 6,4 ja siinä on palikka arvoltaan 3. Miten saan fiksusti etsittyä kaikki palikat mitkä ovat liitoksissa tähän palikkaan ja siitä seuraavan ja siitä seuraavaan jne.
Helppoahan tämä on tehdä neljään pääsuuntaan (vasen, ylös, oikea, alas), mutta sitten kun palikat saattavat jatkua tyyliin kaksi oikealle, kolme ylös; niin siinä tuleekin seinä vastaan. Onko kenellekään mitään hyviä ehdotuksia?
Kun taulukko ei ole tuon suurempi, yksi ihan hyvä ratkaisu voisi olla itseään kutsuva aliohjelma. Ensin aliohjelmaa kutsutaan parametrina tutkittava ruutu. Sitten aliohjelma kutsuu itseään ensin parametrina vaikka vasemmalla puolella oleva ruutu, sitten ylhäällä, oikealla ja alhaalla. Aina jos ruudun numero on oikea, seuraavien ruutujen tutkiminen jatkuu. Löydetyt ruudut pistetään jotenkin talteen.
Tässä on algoritmin runko. Parametrit ovat x ja y (tutkittava kohta) sekä n (vaadittu numero; aluksi 0, jolloin mikä tahansa käy). Jos ruutu on alueen sisällä ja sen numero on oikea, ruutu merkitään toisessa taulukossa ja kutsutaan aliohjelmaa uudestaan parametrina kaikki viereiset ruudut.
tutkiruutu(x, y, n) if x > 0 and y > 0 and x <= 20 and y <= 20 if n = 0 or ruudukko(x, y) = n n = ruudukko(x, y) loydetyt(x, y) = 1 tutkiruutu x - 1, y, n tutkiruutu x, y - 1, n tutkiruutu x + 1, y, n tutkiruutu x, y + 1, n tutkiruutu 6, 4, 0
En nyt testannut tuota, mutta pitäisi toimia tuolla periaatteella. Ja jos löydetyn ruudun voi käsitellä heti jotenkin paremmin, niin ei sitä tietenkään erikseen taulukkoon tarvitse laittaa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.