Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ///Se citesc informatiile unui graf neorientat din fisierul graf.in: n, m 2 numere naturate, 2<=n,m<=100,
- /// n numarul de noduri si m perechi de muchii. Afisati toate componentele de lungima maxima care contin
- ///cel putin un nod de grad minim diferit de 0. Afisarile se vor efectua in fisierul graf.out.
- ///Rezolvarea problemei se va efectua cu functii.
- #include <iostream>
- #include <fstream>
- using namespace std;
- int n,m,a[101][101],viz[101],gr[101],bun;
- void citire()
- {
- ifstream f("grad.in");
- f>>n>>m;
- for(int i=1; i<=n; i++)
- {
- int x,y;
- a[x][y]=a[y][x]=1;
- gr[x]++;
- gr[y]++;
- }
- }
- int bfs(int start,int componenta)
- {
- int coada[101];
- bun=0;
- int u=1,p=0;
- coada[p]=start;
- viz[start]=componenta;
- if(gr[start]!=0)
- bun=1;
- while(p<=u)
- {
- int nod=coada[p];
- for(int i=1; i<=n; ++i)
- if(a[nod][i]==1 && viz[i]==0)
- {
- viz[i]=1;
- coada[++u]=i;
- if(gr[i]!=0)
- bun=1;
- }
- }
- return u;
- }
- void afisare()
- {
- ofstream g("graf.out");
- int nrnodurimax=1,componentamax[101],componente=1;
- int k=0,ok=0;
- for(int i=1; i<=n; ++i)
- if(viz[i]==0)
- {
- int h=bfs(i,componente);
- if(h>nrnodurimax && bun==1)
- k=0,nrnodurimax=h;
- else
- if(h==nrnodurimax && bun==1)
- componentamax[k++]=componente;
- componente++;
- }
- for(int i=0;i<k;i++)
- {
- int ok=0;
- for(int j=1;i<=n;j++)
- {
- g<<j<<' ';
- }
- }
- if(ok==1)
- g<<endl;
- }
- int main()
- {
- citire();
- afisare();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement