Algoritm: Determinarea forma a două sectoare delimitate printr-o cale de arbitrare, iar apoi umple unul

voturi
2

NOTĂ: Aceasta este o problemă dificilă pentru oricine care îi place probleme logice, etc.

Să considerăm o grilă bidimensional dreptunghiulare de înălțime H și lățimea W. Fiecare spațiu pe grila are o valoare, fie 0 1sau 2. Inițial, fiecare spațiu pe grila de start este 0, cu excepția spațiilor de-a lungul fiecăreia dintre cele patru margini, care sunt inițial 2.

Apoi , ia în considerare o cale arbitrară a spațiilor adiacente (orizontal sau vertical) grilă. Calea începe la 2și se termină pe un alt 2. Fiecare spațiu de-a lungul traseului este 1.

Calea împarte grila în două „sectoare“ ale 0spațiilor. Există un obiect care se sprijină pe un nespecificat 0spațiu. „Sectorul“ care nu conține obiectul trebuie să fie umplut complet cu 2.

Definiți un algoritm care determină spațiile pe care trebuie să devină 2din 0, având în vedere o matrice (listă) de valori ( 0, 1sau 2) , care corespund valorilor din grila, mergând de sus în jos și apoi de la stânga la dreapta. Cu alte cuvinte, elementul de la indexul 0 în matrice conține valoarea spațiului din stânga sus în grila (inițial 2). Elementul la indexul 1 conține valoarea spațiului în grila care este în coloana din stânga, al doilea din partea de sus, și așa mai departe. Elementul la indexul H conține valoarea spațiului în grila care este în rândul de sus , dar al doilea din stânga, și așa mai departe.

După ce se termină algoritmul și gol „sectorul“ este umplut complet cu 2s, algoritmul ACEEAȘI trebuie să fie suficientă pentru a face același proces din nou. Al doilea (și) timp, calea este încă trasată de la un 2la un alt 2, peste spațiile de 0, dar „grila“ este mai mică , deoarece 2s , care sunt înconjurate de alte 2s nu poate fi atins de calea (deoarece calea este de-a lungul spațiilor de 0).

Îi mulțumesc oricine este capabil să figura asta pentru mine, foarte foarte mult. Acest lucru nu trebuie să fie într-un anumit limbaj de programare; de fapt, pseudo-cod sau doar în limba engleză este suficientă. Multumesc din nou! Dacă aveți întrebări, lăsați un comentariu și voi specifica ce trebuie să fie specificate.

Întrebat 15/05/2010 la 22:07
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
3

Mi se pare o bază de umplere de inundații algoritm ar face treaba:

  • Scanare matrice pentru prima 0vă găsi, și apoi începe o umplere de inundații de acolo, umplerea 0regiunii cu un alt număr, să spunem că 3- aceasta va eticheta unul din „sectoare“ tale.
  • Odată ce face, scanați din nou pentru o 0, și de inundații umple de acolo, umplerea cu 4acest moment.
  • In timpul ambele umpleri, puteți fi verifica dacă ați găsit obiectul dvs. sau nu; oricare umple-l găsiți în timpul, ține evidența acestui număr.
  • După ce se face atât umpleri, verificați ce regiune numerotat a avut ca obiect în ea - inundații umple acea regiune din nou, înapoi în 0acest timp.
  • Flood umple cealaltă regiune numerotat cu 2, și ați terminat.

Acest lucru va lucra pentru orice configurație grilă, atâta timp cât există exact două 0sectoare care sunt deconectate una de cealaltă; astfel încât reaplicarea același algoritm orice număr de ori este bine.

Editare: anumite trucuri minore, pentru a salva o inundație-umplere sau două -

  • Dacă nu găsiți obiect în primul inundații-umplere, puteți presupune că celălalt sector are, deci doar re-umple numărul curent cu 2și lăsați celălalt sector singur (deoarece este deja 0-filled).
  • De asemenea, dacă faci găsi obiectul în primul inundații-umplere, puteți umple direct cu celălalt sector 2, și apoi re-umple primul sector cu 0.
Publicat 15/05/2010 la 22:23
sursa de către utilizator

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