Algoritmus: Určete tvar dvou odvětvích vymezených libovolným cestou, a pak vyplňte jedno

hlasů
2

Poznámka: Jedná se o náročný problém pro každého, kdo má rád logické problémy, atd

Uvažujme obdélníkový dvourozměrný rastr výšky H a šířky W. Každý prostor v mřížce má hodnotu, a to buď 0 1, nebo 2. Na počátku každé místo na startovním roštu je 0, s výjimkou prostorů podél každé ze čtyř stran, které jsou zpočátku 2.

Pak zváží libovolnou cestu přilehlých (horizontálně nebo vertikálně) mřížky prostorů. Stezka začíná na 2a končí na jiný 2. Každý prostor podél cesty je 1.

Cesta rozděluje mřížku do dvou „sektorů“ z 0prostorů. Tam je objekt, který se opírá o blíže neurčeného 0místa. „Odvětvím“, který neobsahuje objekt musí být zcela naplněna 2.

Definovat algoritmus, který určuje mezery, které se musí stát 2ze 0vzhledem k tomu, pole (seznam) hodnot ( 0, 1, nebo 2), které odpovídají hodnotám v tabulce, se od shora dolů a pak zleva doprava. Jinými slovy, je prvek na indexu 0 v poli obsahuje hodnotu levého horního prostoru v mřížce (zpočátku 2). Prvek na indexu 1 obsahuje hodnotu prostor v mřížce, která je v levém sloupci, druhá z vrcholu, a tak dále. Prvek s indexem H obsahuje hodnotu místa v mřížce, která je v horní řadě, ale druhé zleva, a tak dále.

Jakmile algoritmus končí a prázdné „sektor“ je zcela naplněna 2, stejné algoritmus musí být dostatečná k tomu stejný proces znovu. Druhá (a) čas, cesta je stále čerpá z 2pro různý 2, přes prostor 0, ale „síť“ je menší, protože 2to, že jsou obklopeny jinými 2sa nemůže dotknout cestou (protože je cesta spolu prostorů 0).

Děkuji koho je schopen přijít na to pro mě velmi, velmi mnoho. To nemusí být v konkrétním programovacím jazyku; Ve skutečnosti, pseudo-code, nebo jen angličtina je dostačující. Ještě jednou děkuji! Máte-li jakékoli dotazy, stačí zanechat komentář a budu specifikovat, co třeba upřesnit.

Položena 15/05/2010 v 22:07
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
3

Zdá se mi, základní povodeň fill algoritmus by svou práci:

  • Prohledá váš pole pro první 0najít, a pak spustit povodňových výplň odtud naplnění 0oblast s jiným číslem, řekněme 3- toto označí jeden z vašich „odvětví“.
  • Jakmile je toto hotovo, skenování znovu a obdržíte 0, a záplava vyplnit odtamtud, vyplňování s 4tímto časem.
  • Během obou výplní, můžete být kontrola, zda si našel váš objekt, nebo ne; podle toho, vyplnit jej během najít, sledovat toto číslo.
  • Poté, co oba výplně jsou hotovi, zkontrolujte, který počítal region měl objekt v něm - Vyplnění tohoto regionu opět zpátky s 0tímto časem.
  • Flood naplní druhý číslovaný region s 2, a máte hotovo.

To bude pracovat pro jakoukoli konfiguraci sítě, jak dlouho jak tam jsou přesně dva 0sektory, které jsou odpojeny od sebe navzájem; takže re-použití stejného algoritmu, kolikrát je v pořádku.

Edit: Drobné vylepšení, které vám ušetří povodeň vyplňování nebo dva -

  • Pokud nechcete najít objekt v první povodňové-vyplnění, můžete předpokládat, že druhý sektor má to, takže stačí znovu naplnit aktuální číslo se 2a nechat druhý sektor sám (protože je to již 0-vyplňuje).
  • Případně, pokud jste dělat najít objekt v první povodňové-vyplnění, můžete přímo vyplnit druhý sektor se 2, a pak se znovu naplnit první sektor s 0.
Odpovězeno 15/05/2010 v 22:23
zdroj uživatelem

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