Orar semigroup #2

Orar semigroup #2

11/16

Fotografia alb-negru a unui obiect este reprezentata sub forma unei matrici A (nxn) cu elemente din multimea {0,1}. Doua elemente sunt vecine "in 8 directii". Sa se stabileasca daca obiectul fotografiat este compus dintr-o singura bucata sau nu si sa se afiseze un mesaj corespunzator.

#include<fstream>
#include<iostream>
#include<iomanip>
using namespace std;
int a[100][100],n;

void citire()
{int i,j;
ifstream f("fill.in");
f>>n;
for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
        f>>a[i][j];
    f.close();
}

void fill(int i,int j)
{
    if(a[i][j]==1)
    {
        a[i][j]=2;
        fill(i-1,j);
        fill(i-1,j+1);
        fill(i,j+1);
        fill(i+1,j+1);
        fill(i+1,j);
        fill(i+1,j-1);
        fill(i,j-1);
        fill(i-1,j-1);
    }
}

int main()
{int i,j;
citire();
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            if(a[i][j]==1)
                {fill(i,j);
                i=j=n+2;}
  
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            if(a[i][j]==1)
                {cout<<"Mai mult de un obiect"<<endl;
                for(i=1;i<=n;i++)
                {for(j=1;j<=n;j++)
                    cout<<setw(3)<<a[i][j];
                cout<<endl;}
                return 1;}
    cout<<"Un singur obiect";
}
Fisier
4
1 0 0 0
0 1 0 0
0 0 0 1
0 0 1 0
Pe o matrice nxm sunt codificate obiecte prin valori nr. nat. Obiectele invecinate sunt codificate prin valori diferite. Sa se afiseze dimensiunea obiectelor maximale, coordonatele unui punct din interiorul acestora si codul lor.
#include<fstream>
#include<iostream>
#include<iomanip>
using namespace std;
int a[100][100],n,m,Dmax,nrob,D;
struct obiect{
    int i,j,cod;};
obiect x[10];

void citire()
{int i,j;
ifstream f("fill.in");
f>>n>>m;
for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
        f>>a[i][j];
    f.close();
}

void fill(int i,int j,int k)
{
    if(a[i][j]==k)
    {
        a[i][j]=k*(-1);
        D++;
        fill(i-1,j,k);
        fill(i-1,j+1,k);
        fill(i,j+1,k);
        fill(i+1,j+1,k);
        fill(i+1,j,k);
        fill(i+1,j-1,k);
        fill(i,j-1,k);
        fill(i-1,j-1,k);
    }
}

int main()
{
    int i,j,k;
    citire();
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            if(a[i][j]>0){
                k=a[i][j]; // k=codul obiectului
                D=0;
                fill(i,j,k);
                if(D>Dmax)
                    {Dmax=D;
                    x[1].i=i;
                    x[1].j=j;
                    x[1].cod=k;
                    nrob=1;}
                else if(D==Dmax)
                {nrob++;
                x[nrob].i=i;
                x[nrob].j=j;
                x[nrob].cod=k;}
            }
           
    cout<<"Dimensiune maxim "<<Dmax<<endl;
    for(i=1;i<=nrob;i++)
        cout<<"obiectul codificat "<<x[i].cod<<" contine punctul ("<<x[i].i<<","<<x[i].j<<")"<<endl;
   
for(i=1;i<=n;i++)
{   for(j=1;j<=m;j++)
        cout<<setw(3)<<a[i][j];
cout<<endl;
}
return 0;
}
Fisier
5 7
1 0 0 5 0 7 0
0 1 0 5 0 0 0
0 1 0 5 0 0 20
0 0 5 0 0 0 0
0 0 0 1 1 1 1

marți, 15 noiembrie 2011 by DlMuresan
Categories: | Leave a comment

Leave a Reply