Bordarea unei matrice în C++

În mod implicit, elementele unei matrice nu sunt nule atunci când o declarăm, ci sunt aproape aleatorii. Din acest motiv, atunci când lucrăm cu algoritmi precum cel de umplere (Fill) (în curând lecție) sau Algoritmul lui Lee (în curând lecție), trebuie să ne asigurăm că niciodată nu ieșim din matricea noastră (cu liniile de la 1 la n și coloanele de la 1 la m) și că am rămas în spațiul matricei.

Există câteva metode de a face acest lucru, precum crearea unei funcții auxiliare care verifică dacă coordonatele sunt valide (între 1 și n, respectiv între 1 și m), însă acestea pot fi ineficiente atunci când se apelează de multe ori.

De aceea, o metodă simplă de a verifica dacă o poziție se află sau nu într-o matrice este bordarea matricei, lucru ce se poate face în doar câteva linii de cod. Vedem mai jos cum ar trebui să arate o matrice bordată:

Untitled

Ce înseamnă bordarea unei matrice

De regulă, când lucrăm cu o matrice cu n linii și m coloane, lucrăm cu elementele aflate pe linii de la 1 la n și pe coloane de la 1 la m. Dacă setăm toate elementele de pe linia 0 și n + 1, respectiv coloana 0 și m + 1 cu o anumită valoare, atunci spunem că am bordat matricea și putem să recunoaștem atunci că ne aflăm pe bordura acestei matrice, nu mai putem merge în continuare pe acest drum.

Observație. Elementele aflate pe linia 0 și n + 1, respectiv coloana 0 și m + 1, reprezintă elementele de pe bordura matricei.

Exemplu: algoritmul lui Lee

Un exemplu simplu este algoritmul lui Lee. Dacă în matricea a am notat cu 0 pozițiile în care se poate trece și cu 1 pozițiile blocate (de un perete, de exemplu), atunci putem să bordăm matricea cu elemente de 1, astfel plasând pereți în jurul matricei.

Bordarea se poate face cu orice valoare, însă se recomandă folosirea unei valori sugestive (cum mai devreme am folosit valoarea 1, aceeași pentru a marca obstacolele).

Bordarea unei matrice în C++ (secvență de cod)

Folosind două structuri repetitive de tip for, putem să setăm elementele de pe bordura matricei cu ușurință:

for(int i = 1; i <= n; i++) {
    a[i][0] = 1;
    a[i][m + 1] = 1;
}
for(int j = 1; j <= m; j++) {
    a[0][j] = 1;
    a[n + 1][j] = 1;
}

Exemplu vizual

Iată un exemplu de matrice, cu n = m = 7 linii și coloane. Inițial, matricea nu este bordată deloc:

Untitled

Mai apoi, setăm elementele de pe liniile și coloanele 0 și 8 cu 1, astfel bordând matricea. Bordura matricei are culoarea mai deschisă.

Untitled

Bibliografie și alte resurse

DS

Autorul acestei lecții

Dominic Satnoianu

Această lecție a fost redactată de către Dominic Satnoianu.

© 2021 – 2025 Aspire Education Labs SRL. Toate drepturile rezervate.

Așa cum este specificat și în termeni și condiții, conținutul acestei pagini este protejat de legea drepturilor de autor și este interzisă copierea sau modificarea acestuia fără acordul scris al autorilor.

Încălcarea drepturilor de autor este o infracțiune și se pedepsește conform legii.

Comentarii 0

Autentifică-te pentru a putea comenta.

Autentifică-te