Open veld berekenen

Status
Niet open voor verdere reacties.

wicherh

Gebruiker
Lid geworden
3 dec 2008
Berichten
188
Ik heb een best wel ingewikkelde vraag hoe je iets kan berekenen, namelijk:
"Bereken hoeveel witte vakjes er zijn, die gevangen zijn door de rode vakjes."
Je hebt een grid van x by y:
2yjy3xz.png


Wat is de ruimte daarin? je krijgt een entry point dus x(ligt in dat vak) y(ligt ook in dat vak) en dan moet je in Java berekenen hoeveel lege plaatsen daarnaast zijn iemand weet hoe?
Je kan opvragen of het veld rood/wit is, rood = 1 wit = 0 door vak[x][y]
 
Laatst bewerkt:
Wat heb je zelf al bedacht? Je kunt het probleem bijvoorbeeld opdelen in 2 kleinere problemen: zoek alle witte vlakken die grenzen aan het gegeven vlak EN kijk of ze inderdaad zijn ingesloten door rode vlakken.

Of weet je misschien al dat ze altijd door rode vlakken omsloten zijn? Dat maakt het een stuk makkelijker.
 
Nog een mogelijke aanpak:
Bereken de inhoud van het volledige vlak (rood en wit) en trek daar alle rode vlakken vanaf
 
Daarmee ga je er wel vanuit dat de rode vlakken allemaal tot de 'omsluiting' behoren en er niet los binnenin liggen.
 
Juist niet, je neemt dan juist alle rode velden mee omdat je alleen maar kijkt of een veld rood is of niet. alleen over de berekening van het totale vlak moet je dan goed nadenken

Wil je alleen de omsluiting berekenen zou de de eis "Rode vlak grenzend aan minimaal 2 andere rode vlakken" mee kunnen nemen (is ook niet helemaal sluitend natuurlijk) en die dan weer aftrekken van het volledige vlak..

Maar zonder meer informatie wat er allemaal mogelijk is aan vormen vlakken en groottes en andere voorkomende mogelijkheden zijn er veel manieren om zo'n probleem op te lossen.
 
Als de opdracht inderdaad precies zo is, dat er precies 1 rode rand is met daarbinnen witte vlakken, dan is het vrij eenvoudig te berekenen. Als er echter meer rode vlakken kunnen zijn die niet tot de rode rand behoren, of als er meer rode randen zijn, dan is de opdracht een stuk ingewikkelder.

Het gaat er dus vooral ook om wat de precieze opdracht hier is.
 
Nou je hebt een punt in dat vlak en heb dus nu zelf bedacht dat ik vanuit dat vlak 1 vakje naar boven check naar rechts,links, en onder en vanuit al die vakjes die niet rood zijn zo verder... Het is alleen een beetje moeilijk te coden maar het gaat wel denk ik :P

Een beetje onmogelijk te coden voor iemand van mijn niveua xD :P is mijn eerste java project.

Dit is het stappen plan
1. check alle vakken naast het vlak
2. Tel voor elk vak ernaast dat open is + 1
3. check alle vlakken naast die vlakken
4. tel daar voor elk vlak 1 bij op
5. herhaal 3 totdat er geen vlakken zijn die nog niet geteld zijn.

Kan iemand een soort structure maken hoe ik dit moet doen want heb er al een paar dagen over nagedacht maar lukt me niet zeker niet in java
 
Laatst bewerkt:
Je kan dit het beste recursief oplossen.
Maak een functie met x,y coordinaten als input. Deze functie kijkt dan of x-1,y ; x,y-1 ; x+1,y en x,y+1 wit is en nog niet is bezocht.
Deze functie roept zichzelf aan voor x-1,y ... enz..

Als je weet hoe groot het veld is kan je met een simple array bij houden welk veld je al gehad hebt.

succes
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan