cyalue

Untitled

Dec 5th, 2019
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.95 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. int main() {
  4. double next[20][20];
  5. double a[20][20];
  6. double b[20][20];
  7. double bo[20][20];
  8. double del[20][20];
  9. double dl[20][20];
  10. double op[20][20];
  11.  
  12. cout << "next" << endl;
  13.  
  14. for (int i = 0; i < 20; i++) {
  15. for (int j = 0; j < 20; j++) {
  16. cin >> next[i][j];
  17. }
  18. }
  19.  
  20. cout << "a" << endl;
  21.  
  22. for (int i = 0; i < 20; i++) {
  23. for (int j = 0; j < 20; j++) {
  24. cin >> a[i][j];
  25. }
  26. }
  27.  
  28. cout << "b" << endl;
  29.  
  30. for (int i = 0; i < 20; i++) {
  31. for (int j = 0; j < 20; j++) {
  32. cin >> b[i][j];
  33. }
  34. }
  35.  
  36. for (int i = 0; i < 20; i++) {
  37. for (int j = 0; j < 20; j++) {
  38. del[i][j] = 0;
  39.  
  40. dl[i][j] = 0;
  41.  
  42. op[i][j] = 0;
  43. }
  44. }
  45.  
  46. for (int i = 0; i < 20; i++) {
  47. for (int j = 0; j < 20; j++) {
  48. bo[i][j] = b[i][j];
  49. }
  50. }
  51.  
  52. double dc = 10000;
  53.  
  54. double Oprev = INFINITY;
  55.  
  56. double m0 = INFINITY;
  57.  
  58. int cycles = 0;
  59.  
  60. do {
  61. Oprev = m0;
  62.  
  63. cycles++;
  64.  
  65. for (int i = 0; i < 20; i++) {
  66. for (int j = 0; j < 20; j++) {
  67. if (bo[i][j] != 0) {
  68. double L = 200 * 8;
  69.  
  70. for (int x = 0; x < 20; x++) {
  71. for (int y = 0; y < 20; y++) {
  72. double bm = bo[x][y];
  73.  
  74. double am = a[x][y];
  75.  
  76. if ((i == x) && (j == y)) {
  77. bm += dc;
  78. }
  79.  
  80. del[x][y] = L / (bm - am);
  81. }
  82. }
  83. }
  84.  
  85. for (int x = 1; x < 21; x++) {
  86. for (int y = 1; y < 21; y++) {
  87. double sum = 0;
  88.  
  89. if (x == y) {
  90. sum = del[x - 1][y - 1];
  91. }
  92. else {
  93. int k = x;
  94.  
  95. int nextK = y;
  96.  
  97. while (k != y) {
  98. nextK = next[k - 1][y - 1];
  99.  
  100. sum += del[k - 1][nextK - 1];
  101.  
  102. k = nextK;
  103. }
  104. }
  105.  
  106. dl[x - 1][y - 1] = sum;
  107. }
  108. }
  109.  
  110. double Topt = 0.05;
  111.  
  112. double sumO = 0;
  113.  
  114. for (int x = 0; x < 20; x++) {
  115. for (int y = 0; y < 20; y++) {
  116. sumO += (dl[x][y] - Topt) * (dl[x][y] - Topt);
  117. }
  118. }
  119.  
  120. op[i][j] = sumO;
  121. }
  122. }
  123.  
  124. int mi = 0;
  125.  
  126. int mj = 0;
  127.  
  128. m0 = op[mi][mj];
  129.  
  130. for (int i = 0; i < 20; i++) {
  131. for (int j = 0; j < 20; j++) {
  132. if (op[i][j] != 0) {
  133. double tmp = op[i][j];
  134.  
  135. if (tmp < m0) {
  136. m0 = tmp;
  137.  
  138. mi = i;
  139.  
  140. mj = j;
  141. }
  142. }
  143. }
  144. }
  145.  
  146. double b = bo[mi][mj];
  147.  
  148. bo[mi][mj] = b + dc;
  149.  
  150. cout << "cycles =" << cycles << endl;
  151. } while (m0 < Oprev);
  152.  
  153. cout << "B0" << endl;
  154.  
  155. for (int i = 0; i < 20; i++) {
  156. for (int j = 0; j < 20; j++) {
  157. cout << bo[i][j] << " ";
  158. }
  159.  
  160. cout << endl;
  161. }
  162.  
  163. cout << "DEL" << endl;
  164.  
  165. for (int i = 0; i < 20; i++) {
  166. for (int j = 0; j < 20; j++) {
  167. cout << del[i][j] << " ";
  168. }
  169.  
  170. cout << endl;
  171. }
  172.  
  173. cout << "DL" << endl;
  174.  
  175. for (int i = 0; i < 20; i++) {
  176. for (int j = 0; j < 20; j++) {
  177. cout << dl[i][j] << " ";
  178. }
  179.  
  180. cout << endl;
  181. }
  182.  
  183. cout << "O" << endl;
  184.  
  185. for (int i = 0; i < 20; i++) {
  186. for (int j = 0; j < 20; j++) {
  187. cout << op[i][j] << " ";
  188. }
  189.  
  190. cout << endl;
  191. }
  192.  
  193. return 0;
  194. }
Advertisement
Add Comment
Please, Sign In to add comment