Program.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. using System;
  2. using System.IO;
  3. namespace Джонсон
  4. {
  5. internal class Program
  6. {
  7. static void Main(string[] args)
  8. {
  9. string Path = "test.txt";
  10. string Path1 = "test1.txt";
  11. int n = 0;
  12. using (StreamReader sr = new StreamReader(Path))
  13. {
  14. string str = sr.ReadLine();
  15. while (str != null)
  16. {
  17. n++;
  18. str = sr.ReadLine();
  19. }
  20. }
  21. int[,]mass = new int[n, 2];
  22. int l = 0;
  23. using (StreamReader sr = new StreamReader(Path))
  24. {
  25. string str = sr.ReadLine();
  26. while (str != null)
  27. {
  28. string[] strs = new string[2];
  29. strs = str.Split(" ").ToArray();
  30. mass[l,0] = Convert.ToInt32(strs[0]);
  31. mass[l, 1] = Convert.ToInt32(strs[1]);
  32. l++;
  33. str = sr.ReadLine();
  34. }
  35. }
  36. for(int i = 0; i < n; i++)
  37. {
  38. for(int j = 0;j < 2; j++)
  39. {
  40. Console.Write(mass[i,j] + " ");
  41. }
  42. Console.WriteLine();
  43. }
  44. Console.WriteLine("Максимум для исходного: " + max(n, mass));
  45. int rez = max(n, mass);
  46. Console.WriteLine();
  47. int k = 0;
  48. int b = n;
  49. int ii = 0;
  50. int ij = 0;
  51. int[,] mass1 = new int[n, 2];
  52. while (b-k !=0)
  53. {
  54. int min = 9999;
  55. int min1 = 0;
  56. for (int i = 0; i < n; i++)
  57. {
  58. for (int j = 0; j < 2; j++)
  59. {
  60. if (mass[i, j] <= min && mass[i, j]!=0)
  61. {
  62. if(mass[i, j] == min)
  63. {
  64. if(j == 0 && mass[i, 1] < min1)
  65. {
  66. min = mass[i, j];
  67. ii = i;
  68. ij = j;
  69. }
  70. else if (j == 1 && mass[i, 0] < min1)
  71. {
  72. min = mass[i, j];
  73. ii = i;
  74. ij = j;
  75. }
  76. }
  77. if (mass[i, j] < min)
  78. {
  79. min = mass[i, j];
  80. ii = i;
  81. ij = j;
  82. }
  83. if (j == 0)
  84. {
  85. min1 = mass[i, 1];
  86. }
  87. else
  88. {
  89. min1 = mass[i, 0];
  90. }
  91. }
  92. }
  93. }
  94. int flag = 0;
  95. for (int i = 0; i < n; i++)
  96. {
  97. for (int j = 0; j < 2; j++)
  98. {
  99. if(i >= k && i <= b)
  100. {
  101. if (ij == 0)
  102. {
  103. mass1[k, 0] = min;
  104. mass1[k, 1] = min1;
  105. mass[ii, ij] = 0;
  106. mass[ii, 1] = 0;
  107. }
  108. else if (ij == 1)
  109. {
  110. mass1[b-1, 1] = min;
  111. mass1[b-1, 0] = min1;
  112. mass[ii, ij] = 0;
  113. mass[ii, 0] = 0;
  114. flag = 1;
  115. }
  116. }
  117. }
  118. }
  119. if(flag == 1)
  120. {
  121. b--;
  122. }
  123. else if(flag == 0)
  124. {
  125. k++;
  126. }
  127. }
  128. Console.WriteLine("Оптимальная матрица: ");
  129. Console.WriteLine();
  130. for (int i = 0; i < n; i++)
  131. {
  132. for (int j = 0; j < 2; j++)
  133. {
  134. Console.Write(mass1[i, j] + " ");
  135. }
  136. Console.WriteLine();
  137. }
  138. Console.WriteLine();
  139. Console.WriteLine("Максимум для оптимального: " + max(n, mass1));
  140. using (StreamWriter sw = new StreamWriter(Path1, true))
  141. {
  142. sw.WriteLine();
  143. sw.WriteLine("Время простоя при исходном порядке: " + rez);
  144. sw.WriteLine("Оптимальная матрица:");
  145. for (int i = 0; i < n; i++)
  146. {
  147. for (int j = 0; j < 2; j++)
  148. {
  149. sw.Write(mass1[i, j] + " ");
  150. }
  151. sw.WriteLine();
  152. }
  153. sw.WriteLine();
  154. sw.WriteLine("Время простоя при оптимальном порядке: "+ max(n, mass1));
  155. }
  156. }
  157. static int max(int n, int[,] mass)
  158. {
  159. int m = 0;
  160. int itog = 0;
  161. while (m <= n)
  162. {
  163. int max = 0;
  164. for (int i = 0; i < m; i++)
  165. {
  166. max = max + mass[i, 0];
  167. }
  168. for (int i = 0; i < m - 1; i++)
  169. {
  170. max = max - mass[i, 1];
  171. }
  172. if (max > itog)
  173. {
  174. itog = max;
  175. }
  176. m++;
  177. }
  178. return itog;
  179. }
  180. }
  181. }