Orar semigroup #2

Orar semigroup #2

01/27

Se dă un graf. Să se scrie o funcţie care citeşte datele şi construieşte matricea, o funcţie cu parametru matrice care verifică dacă este simetrică şi are diag. principală 0 (returnează 1 sau 0), o funcţie cu parametru nr nat i care returnează gradul nodului i, o funcţie care afişează nodurile izolate, terminale, de grad n-1, o funcţie care primeşte i şi afişează nodurile adiacente lui i, o funcţie care returnează 1 dacă graful e complet şi 0 în caz contrar.

#include<iostream>
#include<fstream>
#include<iomanip>
using namespace std;
int u[10][10],n,m,i,j,k,a,b,c;

void citire()
{ifstream f("graf");
int j;
f>>n>>m;
for(j=1;j<=m;j++)
{f>>a>>b;
u[a][b]=u[b][a]=1;}
f>>i;
}

int simetrica(int u[10][10])
{int ok=1,i,j,ko=1;
for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
        {if(u[i][j]!=u[j][i])
            ok=0;
        if(i==j && u[i][j]==1)
            ko=0;
        }
if(ok==1 && ko==1)
    return 1;
else return 0;
}

int grad(int i)
{int j,s=0;
for(j=1;j<=n;j++)
    if(u[i][j]==1)
        s++;
return s;
}

void noduri()
{int i,j,s=0,a[10],b[10],c[10],aa=1,bb=1,cc=1;
for(i=1;i<=n;i++)
    {s=0;
        for(j=1;j<=n;j++)
            if(u[i][j]==1)
                s++;
        if(s==0)
            {a[aa]=i;aa++;}
        if(s==1)
        {b[bb]=i;bb++;}
        if(s==n-1)
        {c[cc]=i;cc++;}
    }
cout<<"Noduri izolate ";
for(i=1;i<aa;i++)
    cout<<a[i]<<" ";
if(aa==1)
    cout<<"nu sunt";
cout<<endl<<"Noduri terminale ";
for(i=1;i<bb;i++)
    cout<<b[bb]<<" ";
if(bb==1)
    cout<<"nu sunt";
cout<<endl<<"Noduri de grad "<<n-1<<" ";
for(i=1;i<cc;i++)
    cout<<c[cc]<<" ";
if(cc==1)
    cout<<"nu sunt";
}

void adiacente(int i)
{int j;
cout<<endl<<"Nodurile adiacente lui "<<i<<": ";
for(j=1;j<=n;j++)
    if(u[i][j]==1)
        cout<<j<<" ";
    cout<<endl;
}

int complet()
{
    if(m==n*(n-1)/2)
        return 1;
    else return 0;
}

int main()
{citire();
//cout<<i;
if(simetrica(u)==1)
    cout<<"Matrice simetrica"<<endl;
else cout<<"Matrice nesimetrica"<<endl;
cout<<"Gradul nodului "<<i<<" este "<<grad(i)<<endl;
noduri();
cout<<endl;
adiacente(i);
if(complet()==1)
    cout<<"Graf complet";
else cout<<"Graful nu e complet";
}
Fisier
6 5
1 5
1 4
2 4
2 3
3 5
2

vineri, 27 ianuarie 2012 by DlMuresan
Categories: | Leave a comment

Leave a Reply