Five_NT

[C++]Graf ponderat & Algoritmul lui Roy Warshell

Feb 13th, 2014
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.08 KB | None | 0 0
  1. #include <iostream.h>
  2. #include <fstream.h>
  3.  
  4. const long val=255;
  5. int a[10][10], n, c, nr, viz[10], b[10][10], at[10][10];
  6. ifstream f("citire.txt");
  7. void init()
  8. {
  9.     f>>n;
  10.     for(int i=1; i<=n; i++)
  11.         for(int j=1; j<=n; j++)
  12.             if(i == j)
  13.                 a[i][j] = 0;
  14.             else
  15.                 a[i][j] = val;
  16. }
  17.  
  18. void citire()
  19. {
  20.     int i, j;
  21.     while(f>>i>>j>>c)
  22.     {
  23.         a[i][j] = c;
  24.     }
  25. }
  26. void afis()
  27. {
  28.     for(int i=1; i<=n; i++)
  29.     {
  30.         for(int j=1; j<=n; j++)
  31.             if(a[i][j] != 255)
  32.                 cout<<"00"<<a[i][j]<<"  ";
  33.             else cout<<a[i][j]<<"   ";
  34.         cout<<'\n';
  35.     }
  36. }
  37. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  38. void citiree()
  39. {
  40.     ifstream f("citirea.in");
  41.     f>>n;
  42.     for(int i=1; i<=n; i++)
  43.         for(int j=1; j<=n; j++)
  44.             f>>a[i][j];
  45.     f.close();
  46. }
  47. void transpusa()
  48. {
  49.     for(int i=1; i<=n; i++)
  50.         for(int j=1; j<=n; j++)
  51.             at[i][j] = a[j][i];
  52. }
  53. void RW_a()
  54. {
  55.     for(int k=1; k<=n; k++)
  56.         for(int i=1; i<=n; i++)
  57.             for(int j=1; j<=n; j++)
  58.                 if(a[i][j] == 0 && k!=i && k!=j)
  59.                     a[i][j]=a[i][k]*a[k][j];
  60. }
  61. void RW_at()
  62. {
  63.     for(int k=1; k<=n; k++)
  64.         for(int i=1; i<=n; i++)
  65.             for(int j=1; j<=n; j++)
  66.                 if(at[i][j] == 0 && k!=i && k!=j)
  67.                     at[i][j]=at[i][k]*at[k][j];
  68. }
  69. void intersectie()
  70. {
  71.     for(int i=1; i<=n; i++)
  72.         for(int j=1; j<=n; j++)
  73.             b[i][j] = a[i][j]*at[i][j];
  74. }
  75. void componente()
  76. {
  77.     int nr=0;
  78.     for(int i=1; i<=n; i++)
  79.         if(viz[i] == 0)
  80.         {
  81.             nr++;
  82.             viz[i] = 1;
  83.             cout<<"Componenta "<<nr<<": "<<i<<" ";
  84.             for(int j=1; j<=n; j++)
  85.                 if(b[i][j] == 1 && i!=j)
  86.                 {
  87.                     cout<<j<<" ";
  88.                     viz[j]=1;
  89.                 }
  90.                 cout<<'\n';
  91.         }
  92. }
  93.  
  94.  
  95. int main()
  96. {
  97.     bool p;
  98.     cout<<"1.Algoritmul lui Royl Warshell\n2.Graf ponderat\nProgram: "; cin>>p;
  99.     if(p == false)
  100.     {
  101.         init();
  102.         citire();
  103.         afis();
  104.         f.close();
  105.     }
  106.     else if(p == true)
  107.     {
  108.         citiree();
  109.         transpusa();
  110.         RW_a();
  111.         RW_at();
  112.         intersectie();
  113.         componente();  
  114.     }
  115.     return 0;
  116. }
  117.  
  118. /* citire.txt */
  119. 5
  120. 1 2 4
  121. 1 3 3
  122. 2 4 7
  123. 2 5 8
  124. 3 2 5
  125. 4 3 4
  126. 5 1 2
  127. 5 4 2
  128. /* citiree.in */
  129. 5
  130. 0 1 0 0 0
  131. 0 0 1 0 0
  132. 1 0 0 1 0
  133. 0 0 0 0 1
  134. 0 0 0 1 0
Advertisement
Add Comment
Please, Sign In to add comment