ras.txt 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace ConsoleApplication11
  7. {
  8. class Program
  9. {
  10. struct Element
  11. {
  12. public int Delivery { get; set; }
  13. public int Value { get; set; }
  14. public static int FindMinElement(int a, int b)
  15. {
  16. if (a > b) return b;
  17. if (a == b) { return a; }
  18. else return a;
  19. }
  20. }
  21. static void Main(string[] args)
  22. {
  23. bool o = true;
  24. string s;
  25. while (o == true)
  26. {
  27. try
  28. {
  29. int i = 0;
  30. int j = 0;
  31. int x = 0;
  32. int y = 0;
  33. int n;
  34. int max = 0;
  35. int summa1 = 0;
  36. int summa2 = 0;
  37. bool check = true;
  38. Console.WriteLine("Первоначальное распределение по методу северо-западного угла \n" +
  39. " в транспортной задаче с учетом преобразования исходной матрицы \n" +
  40. " А в матрицу В по правилу: B = {max(эл) + 1} - А \n");
  41. Console.ForegroundColor = ConsoleColor.Blue;
  42. Console.WriteLine("Введите количество поставщиков");
  43. n = Convert.ToInt32(Console.ReadLine());
  44. int[] a = new int[n];
  45. Console.ForegroundColor = ConsoleColor.Red;
  46. Console.WriteLine();
  47. Console.WriteLine("Введите количество потребителей");
  48. int m = Convert.ToInt32(Console.ReadLine());
  49. int[] b = new int[m];
  50. Element[,] C = new Element[n, m];
  51. Console.ForegroundColor = ConsoleColor.DarkBlue;
  52. Console.WriteLine();
  53. while (check == true)
  54. {
  55. summa1 = 0;
  56. summa2 = 0;
  57. Console.WriteLine("Введите численные параметры поставщиков");
  58. for (i = 0; i < a.Length; i++)
  59. {
  60. x = i + 1;
  61. Console.Write($"Поставщик {x}: ");
  62. a[i] = Convert.ToInt32(Console.ReadLine());
  63. summa1 += a[i];
  64. }
  65. Console.ForegroundColor = ConsoleColor.DarkRed;
  66. Console.WriteLine();
  67. Console.WriteLine("Введите численные параметры потребителей");
  68. for (j = 0; j < b.Length; j++)
  69. {
  70. y = j + 1;
  71. Console.Write($"Потребитель {y}: ");
  72. b[j] = Convert.ToInt32(Console.ReadLine());
  73. summa2 += b[j];
  74. }
  75. if (summa1 == summa2)
  76. {
  77. check = false;
  78. }
  79. else if (summa1 != summa2)
  80. {
  81. check = true;
  82. }
  83. Console.Clear();
  84. }
  85. Console.ForegroundColor = ConsoleColor.White;
  86. Console.WriteLine();
  87. Console.WriteLine("Введите элементы матриц: ");
  88. for (i = 0; i < n; i++)
  89. {
  90. for (j = 0; j < m; j++)
  91. {
  92. Console.Write("a[{0},{1}] = ", i, j);
  93. Console.ForegroundColor = ConsoleColor.Red;
  94. C[i, j].Value = Convert.ToInt32(Console.ReadLine());
  95. Console.ResetColor();
  96. }
  97. }
  98. for (i = 0; i < n; i++)
  99. {
  100. for (j = 0; j < m; j++)
  101. {
  102. if (max <= C[i, j].Value)
  103. {
  104. max = C[i, j].Value;
  105. }
  106. }
  107. }
  108. max += 1;
  109. for (i = 0; i < n; i++)
  110. {
  111. for (j = 0; j < m; j++)
  112. {
  113. if (C[i, j].Value != 0)
  114. {
  115. C[i, j].Value = max - C[i, j].Value;
  116. }
  117. }
  118. }
  119. i = j = 0;
  120. // действуем по алгоритму
  121. // идём с северо-западного элемента
  122. // если a[i] = 0 i++
  123. // если b[j] = 0 j++
  124. // если a[i],b[j] = 0 то i++,j++;
  125. // доходим до последнего i , j
  126. while (i < n && j < m)
  127. {
  128. try
  129. {
  130. if (a[i] == 0) { i++; }
  131. if (b[j] == 0) { j++; }
  132. if (a[i] == 0 && b[j] == 0) { i++; j++; }
  133. C[i, j].Delivery = Element.FindMinElement(a[i], b[j]);
  134. a[i] -= C[i, j].Delivery;
  135. b[j] -= C[i, j].Delivery;
  136. }
  137. catch { }
  138. }
  139. Console.WriteLine("\n Итоговая матрица: \n");
  140. //выводим массив на экран
  141. for (i = 0; i < n; i++)
  142. {
  143. for (j = 0; j < m; j++)
  144. {
  145. if (C[i, j].Delivery != 0)
  146. {
  147. Console.ForegroundColor = ConsoleColor.Blue;
  148. Console.Write("{0}", C[i, j].Value);
  149. Console.ForegroundColor = ConsoleColor.Red;
  150. Console.Write("({0})", C[i, j].Delivery); Console.ResetColor();
  151. }
  152. else
  153. Console.Write("{0}({1})", C[i, j].Value, C[i, j].Delivery);
  154. }
  155. Console.WriteLine();
  156. }
  157. int ResultFunction = 0;
  158. //считаем целевую функцию
  159. for (i = 0; i < n; i++)
  160. {
  161. for (j = 0; j < m; j++) { ResultFunction += (C[i, j].Value * C[i, j].Delivery); }
  162. }
  163. Console.WriteLine(" F = {0}", ResultFunction);
  164. i = 0;
  165. j = 0;
  166. int[] u = new int[n];
  167. int[] v = new int[m];
  168. Console.WriteLine("Хотите продолжать работу?(да/нет)");
  169. s = Convert.ToString(Console.ReadLine());
  170. if (s == "да")
  171. {
  172. o = true;
  173. Console.Clear();
  174. }
  175. else if (s == "нет")
  176. {
  177. o = false;
  178. Environment.Exit(0);
  179. }
  180. else { Environment.Exit(0); }
  181. }
  182. catch(Exception)
  183. {
  184. Console.Clear();
  185. Console.ForegroundColor = ConsoleColor.Red;
  186. Console.WriteLine("!!!Ошибка!!!");
  187. Console.ForegroundColor = ConsoleColor.White;
  188. }
  189. }
  190. }
  191. }
  192. }