Algoritme: Bepaal vorm van twee sectoren afgebakend door een willekeurig pad en vul een

stemmen
2

LET OP: Dit is een uitdagend probleem voor iedereen die houdt van logica problemen, enz.

Beschouw een rechthoekig tweedimensionaal raster van hoogte H en de breedte W. Elke ruimte op het rooster heeft een waarde, ofwel 0 1of 2. Aanvankelijk elke ruimte op het rooster is 0, met uitzondering van de ruimten langs elk van de vier randen, die aanvankelijk zijn 2.

Overweeg dan een willekeurige baan van aangrenzende (horizontaal of verticaal) raster plaatsen. Het pad begint op 2en eindigt op een andere 2. Elke ruimte langs het pad is 1.

Het pad splitst het raster in twee sectoren 0ruimten. Er is een object dat berust op een niet nader 0space. De sector dat het object niet bevatten, moeten volledig worden gevuld met 2.

Een algoritme dat de ruimten die moeten worden bepaald bepalen 2van 0, gegeven een array (lijst) waarden ( 0, 1of 2) die overeenkomen met de waarden in het raster, gaande van boven naar beneden en van links naar rechts. Met andere woorden, het element bij index 0 in de matrix bevat de waarde van de linkerbovenhoek ruimte in het rooster (aanvankelijk 2). Het element bij index 1 bevat de waarde van de ruimte in het raster dat in de linkerkolom, tweede van boven, enzovoort. Het element bij index H bevat de waarde van de ruimte in het raster dat in de bovenste rij, maar tweede van links, enzovoort.

Zodra het algoritme voltooid en de lege sector is volledig gevuld met 2s moet hetzelfde algoritme voldoende om hetzelfde proces opnieuw doen. De tweede (en) tijd, wordt het pad nog getrokken uit een 2tot een andere 2, in ruimten van 0, maar de grid kleiner omdat 2s die worden omringd door andere 2s niet kan worden geraakt door de baan (aangezien het pad langs ruimten van 0).

Ik dank wie is in staat om dit uit voor mij, heel erg veel. Dit hoeft niet te worden in een bepaalde programmeertaal; in feite, pseudo-code of gewoon Engels is voldoende. Nogmaals bedankt! Als u vragen heeft, laat een reactie en ik zal aangeven wat er moet worden gespecificeerd.

De vraag is gesteld op 15/05/2010 om 22:07
bron van user
In andere talen...                            


1 antwoorden

stemmen
3

Lijkt me een basis vloedvulling algoritme zou de klus te klaren:

  • Scan uw array voor de eerste 0vind je, en dan beginnen met een vlakvulling van daar, het vullen van de 0regio met een ander nummer, laten we zeggen 3- dit zal één van uw "sectoren" te labelen.
  • Als dat is gebeurd, scannen opnieuw voor een 0, en vul daar, het vullen met een 4deze tijd.
  • Tijdens beide van de vullingen, kunt u controleren of u uw object of niet gevonden; afhankelijk van wat je te vullen tijdens vinden, bijhouden van dat nummer.
  • Nadat beide vullingen zijn gedaan, controleren welke genummerd regio had het object in het - vul dat gebied weer terug met 0deze tijd.
  • Vul de andere genummerde regio 2, en je bent klaar.

Dit zal werken voor een netwerk configuratie, zolang er zijn precies twee 0sectoren die zijn losgekoppeld van elkaar; dus opnieuw aanbrengen van hetzelfde algoritme willekeurig vaak prima.

Edit: Minor tweaks, bespaart u een overstroming-fill of twee -

  • Als u niet uw object in de eerste overstromingsrisico-fill vinden, kunt u ervan uitgaan dat de andere sector heeft het, dus je moet gewoon opnieuw vullen van het huidige nummer met 2en laat de andere sector alleen (omdat deze al is 0-gevulde).
  • Of als u doen vinden het object in de eerste overstromingsrisico-fill, kunt u direct de andere sector mee te vullen 2, en vervolgens opnieuw te vullen de eerste sector 0.
antwoordde op 15/05/2010 om 22:23
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more