Advertisement
hegemon88676

Fabrica

May 29th, 2018
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.53 KB | None | 0 0
  1. #include<fstream>
  2. #include<iostream>
  3. using namespace std;
  4. ifstream f("datein.in");
  5.  
  6. int c[101],maxim=0,n,neah=-1,a[102][102];
  7.  
  8. void citire()
  9. {
  10.     int i,j,k,cost;
  11.     f>>n;
  12.     for(i=1; i<=n+1; i++)
  13.         for(j=1; j<=n+1; j++)
  14.             if(i==j) a[i][j]=0;
  15.             else  a[i][j]=neah;
  16.     for(i=1; i<=n; i++)
  17.         f>>c[i];
  18.     for(i=1; i<=n; i++)
  19.     {
  20.         f>>k;
  21.         for(j=1; j<=k; j++)
  22.         {
  23.             f>>cost;
  24.             a[cost][i]=c[cost];
  25.         }
  26.     }
  27.     a[n][n+1]=c[n];
  28. }
  29.  
  30. void afis()
  31. {
  32.     int i,j;
  33.     cout<<endl;
  34.     for(i=1; i<=n; i++)
  35.     {
  36.         for(j=1; j<=n; j++)
  37.             if(a[i][j]<0) cout<<"# ";
  38.             else cout<<a[i][j]<<" ";
  39.         cout<<endl;
  40.     }
  41. }
  42.  
  43. void rf()
  44. {
  45.     int i,j,k;
  46.     for(k=1; k<=n; k++)
  47.         for(i=1; i<=n; i++)
  48.             for(j=1; j<=n; j++)
  49.                 if(a[i][j]<a[i][k]+a[k][j] && a[i][k]!=-1 && a[k][j]!=-1)
  50.                 {
  51.                     a[i][j]=a[i][k]+a[k][j];
  52.                     if(a[i][j]>maxim) maxim=a[i][j];
  53.                 }
  54. }
  55.  
  56. int main()
  57. {
  58.     citire();
  59.     cout<<"Matricea costurilor (duratelor):";
  60.     afis();
  61.     rf();
  62.     cout<<"\n\nMatricea costurilor (duratelor) maxime:";
  63.     afis();
  64.     cout<<endl<<maxim+c[n]<<"(durata productiei)"<<endl;
  65.     for(int i=1; i<=n; i++)
  66.     {
  67.         long mmm=0;
  68.         for(int j=1; j<=n; j++)
  69.             if(a[j][i]>mmm)  mmm=a[j][i];
  70.         cout<<"Cel mai devreme pentru sectia "<<i<<": "<<mmm<<", iar cel mai tarziu ";
  71.         if(maxim>a[i][n]) cout<<maxim-a[i][n]<<endl;
  72.         else cout<<0<<endl;
  73.     }
  74. }
  75. ///     Intr-o fabrica exista n sectii numerotate de la 1 la n in 3 categorii:
  76. ///-sectii de intrare, adica sectii prin care intra in fabrica materii prime
  77. ///-sectii intermediare, care primesc produse intermediare de la alte sectii, le prelucreaza si le transmit la randul lor altor sectii
  78. ///-sectia numerotata cu n care este o sectie de finalizare a productiei
  79. ///     Pentru fiecare sectie dintre cele n se cunosc urmatoarele informatii:
  80. ///-durata necesara pentru prelucrarea in sectia respectiva
  81. ///-numarul sectiilor si sectiile care furnizeaza produse intermediare sectiei curente
  82. ///     Stiind ca durata transportului produselor intermediare intre sectii este neglijabila, ca in fabrica nu se formeaza circuite de productie si ca o sectie poate sa-si inceapa activitatea doar dupa sect care furnizeaza materii le-au furnizat.
  83. ///     Calculati urmatoarele:
  84. ///- timpul necesar pt fabricarea produsului finit
  85. ///- pt fiecare sectie timpul cel mai devreme ca sa poata incepe productia si timpul cel mai tarziu in care poate incepe productia astfel incat durata totala a productiei sa nu fie afectata.
  86. ///     Observatii:
  87. ///- sectiile fabriici pot lucra simultan
  88. ///- sectiile de intrare pornesc cel mai devremea la momentul 0.
  89. ///     Indicatii:
  90. ///- duratele din varfuri se se muta pe arce
  91. ///- se construieste matrice a costurilor (duratelor)
  92. ///- se aplica algoritmul Roy-Floyd pentru drum de cost maxim
  93. ///- durata productiei este maximul de pe ultima linia adunat cu durata de prelucrare din sectia n
  94. ///- cel mai repede o sectie poate incepe productia dupa ce au ajuns in ea produsele din sectiile de care depinde, adica maximul de pe coloana
  95. ///- cel mai tarziu o sectie poate incepe productia astfel incat durata productiie de la ea la ultima sectie sa nu fie mai mare decat durata de productie a celorlalte sectii, si se obtine prin diferenta de pe ultima coloana dintre maxim si fiecare element (durata corespunzatoare fiecarei sectii).
  96. /*date.in
  97. 12 (n)
  98. 3 1 8 3 5 3 6 7 1 7 9 6 (costurile)
  99. 0 (sectia 1 nu depinde de alta)
  100. 2 1 10 (sectia 2 depinde de 2 sectii, si anume de 1 si 10)
  101. 3 2 4 9
  102. 2 10 11
  103. 1 3
  104. 2 3 7
  105. 2 4 9
  106. 2 3 7
  107. 1 11
  108. 0
  109. 0
  110. 3 5 6 8
  111. date.out
  112. matricea initiala:
  113. 0 3 # # # # # # # # # #
  114. # 0 1 # # # # # # # # #
  115. # # 0 # 8 8 # 8 # # # #
  116. # # 3 0 # # 3 # # # # #
  117. # # # # 0 # # # # # # 5
  118. # # # # # 0 # # # # # 3
  119. # # # # # 6 0 6 # # # #
  120. # # # # # # # 0 # # # 7
  121. # # 1 # # # 1 # 0 # # #
  122. # 7 # 7 # # # # # 0 # #
  123. # # # 9 # # # # 9 # 0 #
  124. # # # # # # # # # # # 0
  125.  
  126. matricea costurilor maxime
  127. 0 3 4 # 12 12 # 12 # # # 19
  128. # 0 1 # 9 9 # 9 # # # 16
  129. # # 0 # 8 8 # 8 # # # 15
  130. # # 3 0 11 11 3 11 # # # 18
  131. # # # # 0 # # # # # # 5
  132. # # # # # 0 # # # # # 3
  133. # # # # # 6 0 6 # # # 13
  134. # # # # # # # 0 # # # 7
  135. # # 1 # 9 9 1 9 0 # # 16
  136. # 7 10 7 18 18 10 18 # 0 # 25
  137. # # 12 9 20 20 12 20 9 # 0 27
  138. # # # # # # # # # # # 0
  139. 33 (durata productiei)
  140. 0 8 (cel mai devreme, cel mai tarziu)
  141. 7 11
  142. 12 12
  143. 9 9
  144. 20 22
  145. 20 24
  146. 12 14
  147. 20 20
  148. 9 11
  149. 0 2
  150. 0 0
  151. 27 27
  152. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement