Rezolvare completă PbInfo #635 Vecini1

Cerința

Se dă o matrice cu n linii și m coloane și elemente numere naturale. Determinați pentru câte dintre elementele matricei toți vecinii au valori diferite între ele.

Date de intrare

Fișierul de intrare vecini1.in conține pe prima linie numerele n m; urmează n linii cu câte m numere naturale separate prin spații – elementele matricei.

Date de ieșire

Fișierul de ieșire vecini1.out va conține pe prima linie numărul C, reprezentând valoarea cerută.

Restricții și precizări

  • 1 ≤ n,m ≤ 100
  • elementele matricei vor fi mai mici decât 1 000 000
  • considerăm că un element al matricei poate avea patru vecini: elementele situate pe aceeași linie și pe coloanele adiacente și elementele aflate pe aceeași coloană și liniile adiacente

Exemplu

vecini1.in

4 5
6 6 4 6 6 
2 2 6 4 6 
1 1 7 3 6 
6 3 6 5 6

vecini1.out

9

Explicație

Cele 9 elemente sunt marcate mai jos:

6 6 4 6 6
2 2 6 4 6
1 1 7 3 6
6 3 6 5 6

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Vecini1:

#include <iostream>
#include <fstream>
using namespace std;

ifstream fin("vecini1.in");
ofstream fout("vecini1.out");

const int di[] = {0 , 0, 1 , -1} , dj[] = {1 , -1 , 0 , 0};

int n,m,A[105][105];

int  main()
{
    fin >> n >> m;
    for(int i =1 ; i <= n ; ++i)
        for(int j = 1 ; j <= m ; ++j)
            fin >> A[i][j];
            
    //pentru a ignora cazurile speciale (prima linie, prima coloana, etc),
    //bordam matricea cu valori diferite, incepand de la valoare maxim + 1
    int  p  = A[1][1] ;
    for(int i =1 ; i <= n ; ++i)
        for(int j = 1 ; j <+ m ; ++j)
            if(A[i][j] > p)
                p = A[i][j];
    p ++;
    for(int i = 0 ; i <= n  + 1 ; i ++)
        A[i][0] = p ++, A[i][m + 1] = p ++;
    for(int j = 1 ; j <= m ; ++j)
        A[0][j] = p ++, A[n + 1][j] = p ++;
    int cnt = 0;
    // parcurgem matricea si verificam pentru fiecare element daca are toti vecinii diferiti
    for(int i = 1 ; i <= n ; ++i)
        for(int j = 1 ; j <= m ; ++j)
        {
            bool OK = true;
            for(int s = 0 ; s < 3 ; s ++)
                for(int t = s + 1 ; t < 4 ; t ++)
                    if(A[i + di[s]][j + dj[s]] == A[i + di[t]][j + dj[t]])
                        OK = false;
            if(OK)
                cnt ++;
        }
    fout << cnt << endl;
    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #635 Vecini1

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #635 Vecini1 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!