Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- using namespace std;
- ifstream f("graf.in");
- ofstream g("rezultate.out");
- int n, m, a[15][15], c[15], viz[15], start, nc, cmax[15], lmax;
- //c = numara componentele conexe
- //daca sunt 2 comp la fel de lungi, ultima componenta conexa
- struct muchie
- {
- int x, y;
- };
- muchie v[30];
- void citire()
- {
- f>>n>>m;
- for(int i=0;i<m;i++)
- {
- f>>v[i].x>>v[i].y;
- a[v[i].x][v[i].y] = 1;
- a[v[i].y][v[i].x] = 1;
- }
- f>>start;
- }
- void bfs(int x)
- {
- int prim = 1, ultim = 1;
- c[1] = x;//salvat in coada
- viz[x] = 1;//selectat
- while(prim<=ultim)
- {
- int nod = c[prim];
- for(int i=1;i<=n;i++)
- if(!viz[i] && a[nod][i] == 1)
- {
- c[++ultim] = i;//salvat vecin
- viz[i] = 1;//vizitat vecin
- }
- prim++;
- }
- //ultim este numarul de noduri din componenta conexa curenta
- if(lmax <= ultim)
- {
- lmax = ultim;
- for(int u=1;u<=ultim;u++)
- cmax[u] = c[u];
- }
- }
- //aceasta functie intoarce primul nod care nu a fost vizitat
- int nevizitat()
- {
- for(int i=1;i<=n;i++)
- if(viz[i] == 0)
- return i;//primul nevizitat
- return -1;//daca le-a vizitat pe toate
- }
- int main()
- {
- citire();
- g<<"cea mai lunga componenta conexa a grafului:"<<endl;
- do
- {
- bfs(start);
- start = nevizitat();
- }while(start != -1);
- for(int i=1;i<=lmax;i++)
- g<<cmax[i]<<' ';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement