Algoritme: Bestem form av to sektorer avgrenset av en vilkårlig bane, og deretter fylle en

stemmer
2

MERK: Dette er en utfordrende problem for noen som liker logikk problemer, etc.

Betrakt en rektangulær todimensjonalt gitter med høyde H og bredde W. Hver plass på gitteret har en verdi, enten 0 1eller 2. Til å begynne med, hver plass på gitteret er en 0, med unntak av de områder langs hver av de fire kanter, som i utgangspunktet er en 2.

Deretter vurdere en vilkårlig bane av tilstøtende (horisontalt eller vertikalt) gitter mellomrom. Stien begynner på en 2og ender på en annen 2. Hver plass langs stien er en 1.

Banen deler gitteret i to sektorer av 0mellomrom. Det er en gjenstand som hviler på en uspesifisert 0plass. Den sektor som ikke inneholder objektet må fylles helt med 2.

Definere en algoritme som bestemmer mellomrommene som må bli 2fra 0, gitt en matrise (liste) med verdier ( 0, 1, eller 2) som svarer til verdiene i risten, fra topp til bunn, og deretter fra venstre til høyre. Med andre ord, det element ved indeks 0 i gruppen inneholder verdien av det øvre venstre plass i gitteret (opprinnelig en 2). Elementet ved indeks 1 inneholder verdien på plass i gitteret som ligger i den venstre kolonnen, andre fra toppen, og så videre. Elementet ved indeks H inneholder verdien av den plass i gitteret som ligger i den øvre rad, men andre fra venstre, og så videre.

Når algoritmen utførelser og den tomme sektoren er fullstendig fylt med 2s, må det samme algoritmen være tilstrekkelig til å gjøre det samme prosessen på nytt. Den andre (og på) tid, blir banen fortsatt trukket fra en 2til en annen 2, på tvers av områder av 0, men den gitter er mindre fordi den 2s som er omgitt av andre 2s ikke kan berøres av banen (siden banen er langs rommene i 0).

Jeg takker hvem er i stand til å finne ut av dette for meg, veldig veldig mye. Dette trenger ikke å være i et bestemt programmeringsspråk; faktisk, pseudo-kode eller bare engelsk er tilstrekkelig. Takk igjen! Hvis du har noen spørsmål, bare legge igjen en kommentar og jeg skal spesifisere hva som må spesifiseres.

Publisert på 15/05/2010 klokken 21:07
kilden bruker
På andre språk...                            


1 svar

stemmer
3

Synes for meg en grunnleggende flom fyll algoritmen ville få jobben gjort:

  • Skann array for det første 0finne deg, og deretter starte en flom fyll derfra, fylle 0regionen med noen andre tall, la oss si 3- dette vil merke en av dine "sektorer".
  • Når det er gjort, skanne igjen for en 0og flom fylle derfra, fylle med 4denne gangen.
  • Under begge fyllingene, kan du sjekke om du har funnet din objekt eller ikke; avhengig av hva fyller du den under, holde styr på dette nummeret.
  • Etter at begge fyll er ferdig, sjekk hvilke nummerert regionen hadde objektet i det - flom fylle denne regionen igjen, tilbake med 0denne gangen.
  • Flood fylle den andre nummerert regionen med 2, og du er ferdig.

Dette vil fungere for alle grid konfigurasjon, så lenge det er nøyaktig to 0sektorer som er koblet fra hverandre; så re-anvendelse av samme algoritme et hvilket som helst antall ganger er fine.

Edit: Mindre justeringer, for å spare deg for en flom-fill eller to -

  • Dersom du ikke finner din gjenstand i første flom fyll, kan du anta at den andre sektoren har det, slik at du bare fylle på nåværende antall med 2og la den andre sektoren alene (siden det allerede 0-filled).
  • Alternativt, hvis du gjør finne objektet i den første flom fyll, kan du direkte fylle den andre sektoren med 2, og deretter re-fylle den første sektoren med 0.
Svarte 15/05/2010 kl. 21:23
kilden bruker

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