Advertisement
Guest User

Untitled

a guest
Oct 21st, 2014
294
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.53 KB | None | 0 0
  1. #include <fstream>
  2. using namespace std;
  3.  
  4.  
  5. ifstream f("graf.in");
  6. ofstream g("rezultate.out");
  7. int n, m, a[15][15], c[15], viz[15], start, nc, cmax[15], lmax;
  8. //c = numara componentele conexe
  9. //daca sunt 2 comp la fel de lungi, ultima componenta conexa
  10. struct muchie
  11. {
  12.     int x, y;
  13. };
  14. muchie v[30];
  15.  
  16. void citire()
  17. {
  18.  
  19.     f>>n>>m;
  20.     for(int i=0;i<m;i++)
  21.     {
  22.         f>>v[i].x>>v[i].y;
  23.         a[v[i].x][v[i].y] = 1;
  24.         a[v[i].y][v[i].x] = 1;
  25.     }
  26.     f>>start;
  27. }
  28.  
  29.  
  30. void bfs(int x)
  31. {
  32.     int prim = 1, ultim = 1;
  33.     c[1] = x;//salvat in coada
  34.     viz[x] = 1;//selectat
  35.     while(prim<=ultim)
  36.     {
  37.         int nod = c[prim];
  38.         for(int i=1;i<=n;i++)
  39.             if(!viz[i] && a[nod][i] == 1)
  40.             {
  41.                 c[++ultim] = i;//salvat vecin
  42.                 viz[i] = 1;//vizitat vecin
  43.             }
  44.         prim++;
  45.     }
  46.     //ultim este numarul de noduri din componenta conexa curenta
  47.     if(lmax <= ultim)
  48.     {
  49.         lmax = ultim;
  50.         for(int u=1;u<=ultim;u++)
  51.             cmax[u] = c[u];
  52.     }
  53. }
  54. //aceasta functie intoarce primul nod care nu a fost vizitat
  55. int nevizitat()
  56. {
  57.     for(int i=1;i<=n;i++)
  58.         if(viz[i] == 0)
  59.             return i;//primul nevizitat
  60.     return -1;//daca le-a vizitat pe toate
  61. }
  62. int main()
  63. {
  64.     citire();
  65.     g<<"cea mai lunga componenta conexa a grafului:"<<endl;
  66.     do
  67.     {
  68.         bfs(start);
  69.         start = nevizitat();
  70.     }while(start != -1);
  71.  
  72.     for(int i=1;i<=lmax;i++)
  73.         g<<cmax[i]<<' ';
  74.     return 0;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement