Sunteți pe pagina 1din 7

Proiect

informatica

Nume problema : Bipartit

Table of Contents
Enuntul Problemei:.............................................3
1.Tehnica folosita : Nu sa folosit nicio tehnica
speciala,doar functii si instructiuni repetitive...4
2.Variabile globale folosite.Toate variabilele
sunt intregi.......................................................4
3.Descrierea functiilor folosite:.........................4
4.Descrierea algoritmului folosit......................4
5.Elemente de eficienta:..................................4
Algoritmul..........................................................6
Exemple de date de intrare................................7

Enuntul Problemei:
Cerina
Se d lista muchiilor unui graf neorientat cu n vrfuri, etichetate
de la 1 la n, precum si o mulime A de vrfuri ale grafului.
Considerm mulimea B format din vrfurile grafului care nu
aparin lui A. S se verifice dac graful este bipartit peste partiia
format din mulimile A i B.
Date de intrare
Fiierul de intrare bipartit.in conine pe prima linie
numerele n i m, reprezentnd numrul de vrfuri ale grafului i
numrul de muchii. Fiecare dintre urmtoarele m linii conine cte
o pereche de numere i j, cu semnificaia c exist muchie
ntre i i j. Urmeaz un numr k, apoi k numere naturale distincte
cuprinse ntre 1 i n, reprezentnd vrfurile din A.
Date de ieire
Fiierul de ieire bipartit.out va conine pe prima linie mesajul DA,
dac graful este bipartit peste partiia format din mulimile A i B,
respectiv NU n caz contrar.
Restricii i precizri

1 < k < n 100

1i,jn

muchiile se pot repeta n fiierul de intrare


Descrierea metodei de rezolvare :
1. Tehnica folosita : Nu sa folosit nicio tehnica speciala,doar
functii si instructiuni repetitive
2. Variabile globale folosite.Toate variabilele sunt intregi

a. n,m reprezinta numarul de varfuri respective de muchii


ale grafului
b. a reprezinta matricea de adiacenta a grafului
c. v este un vector folosit pentru a marca elementele
multimii a
3. Descrierea functiilor folosite:
a. Functia citire() este de tip void si este folosita pentru a citi
din fisier n si m ,apoi m muchii si componentele multimii
A.Tot in functia citire elementele multimii A sunt marcate
cu valoarea 1 in vectorul v
b. Functia verificare() verifica daca exista muchie intre 2
elemente ce apartin aceleiasi multimi.Este de tip int si
returneaza 1 daca nu exista muchie intre oricare 2
elemente ale multimii si altfel returneaza 0
c. Functia main ,
4. Descrierea algoritmului folosit
Initial se executa citirea prin intermediul apelului functiei citire
in interiorul functiei main.
Cu ajutorul functiei verificare se testeaza daca intre oricare 2
elemente din multimea marcata cu 1 exista muchie sau intre
oricare 2 elemente din multimea marcata cu 0 exista
muchie.Se returneaza 1 daca nu exista in nici un caz muchie
si 0 daca exista cel putin un caz in care exista muchie.
Cu ajutorul instructiuni if se afiseaza in fisierul de iesire
mesajul DA daca conditia este indeplinita sau NU daca
conditia nu e indeplinita
5. Elemente de eficienta:
Complexitatea este O(nxn)

Algoritmul
1. #include<fstream>
2. using namespace std;
3. ifstream fin("bipartit.in");
4. ofstream fout("bipartit.out");
5. int n,m,a[101][101],v[101];
6. void citire()
7. {
8.

int x,y;

9.

fin>>n>>m;

10.

for(int i=1;i<=m;i++)

11.

12.

fin>>x>>y;

13.

a[x][y]=a[y][x]=1;

14.

15.

fin>>y;

16.

for(int i=1;i<=y;i++)

17.

{fin>>x;

18.

v[x]=1;

19.

20. }
21. int verificare()
22. { for(int i=1;i<=n;i++)
23.

for(int j=1;j<=n;j++)

24.

25.
26.

if(a[i][j]==1 && v[i]==v[j]) {


}

27. return 1;
28. }
29. int main()
30. {
31.

citire();

32.

if(verificare()==1)fout<<"DA";

33.

else fout<<"NU";

34.

return 0;

35. }
36.

return 0;}

Exemple de date de intrare


Date de intrare :
76
14
16
65
32
35
37
3
463
Date de iesire : DA
Date de intrare :
35
14
23
41
34
2
45
Date de iesire : DA
Date de intrare :
35
14
23
41
34
2
41

Date de iesire : NU

S-ar putea să vă placă și