Contact și feedback

Nu obții 100 de puncte sau ai nelămuriri în privința problemelor? Scrie-mi pe Instagram.


Ai găsit o greșeală, vrei să raportezi un utilizator sau vrei să comunici altceva? Folosește formularul de contact.


Vrei să ne transmiți o părere despre platformă? Folosește formularul de feedback.

Shortcuturi

Folosește următoarele shortcuturi pentru a naviga mai ușor pe platformă.

Generale

Meniu shortcuturi?
Căutare probleme sau utilizatori/
Navigare printre rezultatele căutării↑, ↓
Meniu de contact și feedbackCTRL + Shift + F
Ieșire din meniuriEsc

Editor probleme

Setări editorCTRL + Shift + S
Schimbare stil editorCTRL + Shift + E
Șabloane de codCTRL + Shift + 1/2/3
Golire editorCTRL + Shift + 4

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

Cuprinsul lecției

Se încarcă…

Citește și

Indicatorul lui Euler al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Mediana unui șir de valori în C++Vectorii în C++: citire și afișareȘiruri de caractere în C++. Tot ce trebuie să știiPrima cifră a unui număr în C++Maximul și minimul unui vector în C++Verifică dacă un caracter este cifră în C++Aria unui triunghi folosind coordonatele acestora în C++Oglinditul recursiv al unui număr în C++Verifică dacă trei puncte sunt coliniare C++Numărul de divizori al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Divide et Impera (metodă de programare C++)Comentarii în C++Suma 1 + 2 + 3 + ... + N în C++Inversarea unui vector în C++Vectori de frecvență (de apariții) în C++Verifică dacă o literă este vocală în C++Transformarea unui număr din baza 2 în baza 10 în C++Factorialul unui număr în C++Generarea șirului Fibonacci generalizat în C++CMMMC a două numere în C++ (cel mai mic multiplu comun)Verifică dacă un număr dat este o putere de 2 în C++Cel mai puțin semnificativ bit în C++Verifică dacă un număr este par sau impar fără modulo în C++Aria și circumferința unui cerc în C++Șirul lui Fibonacci în C++Cea mai lungă secvență de elemente crescătoare în C++Verifică dacă un număr aparține șirului Fibonacci în C++Aflarea sumei primelor N sume GaussTipul struct în C++. Ce sunt structurile de date neomogeneCiurul lui Eratostene în C++Al N-lea termen dintr-o progresie aritmeticăCel mai mic/mare divizor prim al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Cum să calculezi instant 2 la puterea N în C++Citește un șir de caractere cu spații în C++CMMDC recursiv a două numere naturale în C++Funcții predefinite în C++ (matematice, șiruri de caractere)Numărul de divizori al unui număr în C++Bordarea unei matrice în C++Instrucțiunea do while (structuri repetitive)Maximul și minimul a n valori în C++Recursivitate în C++Maximul și minimul a două valori în C++Instrucțiunea continue (structuri repetitive)Afișarea divizorilor primi ai unui număr în C++Suma divizorilor unui număr în C++Verificarea unui an bisect în C++Transformarea unui număr din baza 10 în baza 2 în C++Numărul de divizori primi ai unui număr în C++Cifrele unui număr. Prelucrarea cifrelor unui număr în C++Verificare număr prim în C++ (Clasa a IX-a)Ce înseamnă endl în C++?Interschimbarea a două variabile în C++ (3 metode)Verificare dacă șir de caractere este palindrom în C++Matrice în C++. Declararea și parcurgerea tablourilor bidimensionaleNumărul combinărilor în C++ (formula combinărilor)Valoarea absolută (modulul) unui număr în C++Rădăcina cubică a unui număr în C++ (cube root)Maximul și minimul a trei valori în C++Combinatorică în C++: permutări, aranjamente, combinări și alteleAl N-lea termen Fibonacci în C++Operații cu numere mari în C++ - Toate funcțiile explicateAplicații cu ciurul lui Eratostene în C++: suma divizorilor, numărul divizorilorInstrucțiunea de decizie în C++: if, else, switch, caseNumărul aranjamentelor în C++ (formula aranjamentelor)Numărul de cifre ale factorialului unui numărOglinditul unui număr în C++Indicatorul lui Euler în C++Cel mai mare divizor comun (CMMDC) a două numere în C++Cel mai semnificativ bit în C++Vectorii în C++: declarare și parcurgereDe ce cer unele probleme răspunsul modulo 666013 sau modulo 1.000.000.007?Suma divizorilor numerelor de la 1 la N (Folosind ciurul lui Eratostene)Câte numere naturale sunt într-un interval dat? (C++)Verificare dacă un număr este palindrom în C++Numere triunghiulare. Verificarea unui număr triunghiularCifra maximă a unui număr recursiv în C++Tipuri de date în C++: numere întregi, reale, caractere și alteleRadicalul unui număr în C++ (rădăcina pătrată)Matrice Fibonacci - al n-lea termen Fibonacci în timp logaritmicCăutare binară în C++Cum să citești și să afișezi în fișiere în C++Suma numerelor naturale dintr-un interval dat în C++Instrucțiunea while (structuri repetitive)Transformarea unei litere mici în literă mare în C++Calculul combinărilor de n luate câte k (nCk) în C++Numărul minim de peroane pentru o gară în C++Suma elementelor unui vector recursiv în C++Numărul permutărilor în C++ (formula permutărilor)Al N-lea termen dintr-o progresie geometricăVerifică dacă un caracter este literă în C++Află secolul unui an citit de la tastatură în C++Algoritm recursiv pentru căutare binară (clasa a X-a)Inversarea unui șir de caractere în C++Copiuțe: Cifrele unui numărCe este o funcție void în C++?Complexitatea unui algoritm (timp și spațiu) în C++Interclasarea a doi vectori în C++Cel mai frecvent element dintr-un șir în C++Pointer în C++. Variabile de tipul char * (char steluță)Instrucțiunea for (structuri repetitive)Cel mai mic număr cu suma cifrelor N în C++Numărul de apariții al unui număr într-un vector în C++Distanța dintre două puncte în C++Funcții în C++. Ce sunt subprogrameleCe înseamnă variabilă globală și locală în C++?Ridicarea la putere în timp logaritmic în C++. Exponențiere rapidăCitirea și afișarea matricelor în C++Verifică dacă un bit de pe o anumită poziție este 1 sau 0 în C++Cifra maximă și minimă a unui număr în C++Tutorial instalare CodeBlocks (ușor) - Introducere în informatică C++Ce este o variabilă unsigned în C++?Matrice pătratice în C++. Diagonala principală și secundarăMateria pentru olimpiada de informatică - tot ce trebuie să știiTransformarea unei litere mari în literă mică în C++Do while vs while în C++ - Care e diferența?Verifică dacă o literă este mică sau mare în C++Codul ASCII (tabel complet)Sortare crescătoare recursivă în C++ - Merge sort și Bubble sortAfișarea elementelor unui vector recursiv în C++Structuri repetitive (while, do while, for, etc)Instrucțiunea break (structuri repetitive)Cifra de control a unui numărCum să afișezi partea întreagă a unui număr real în C++

© Drepturi de autor

Echipa InfoAs își rezervă drepturile de autor pentru conținutul acestei pagini. Copierea conținutului fără acordul scris expres al InfoAs reprezintă o încălcare a Legii 8/1996 și va fi tratată ca atare.

Trimite lecția

Toată lecția

Doar videoclipul pe YouTube

Informatica devine ușoară cu InfoAs

Intră în cont