using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication11 { class Program { struct Element { public int Delivery { get; set; } public int Value { get; set; } public static int FindMinElement(int a, int b) { if (a > b) return b; if (a == b) { return a; } else return a; } } static void Main(string[] args) { int i = 0; int j = 0; // переменные int n; int max = 0; int sumM = 0; int sumN = 0; string vixod = "y"; Console.WriteLine("Сделать первоначальное распределение по методу северо-западного угла в транспортной задаче \nс учетом преобразования исходной матрицы А в матрицу В по правилу: В = { mахл + 1}-А\n"); do { try { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Введите количество столбцов"); // ввод значений в переменные n = Convert.ToInt32(Console.ReadLine()); int[] a = new int[n]; Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Введите количество строк"); int m = Convert.ToInt32(Console.ReadLine()); int[] b = new int[m]; Element[,] C = new Element[n, m]; Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Введите M"); for (i = 0; i < a.Length; i++) { a[i] = Convert.ToInt32(Console.ReadLine()); } Console.WriteLine("Введите N"); for (j = 0; j < b.Length; j++) { b[j] = Convert.ToInt32(Console.ReadLine()); } Console.ForegroundColor = ConsoleColor.White; for (i = 0; i < a.Length; i++) { sumM += a[i]; } for (j = 0; j < b.Length; j++) { sumN += b[j]; } if (sumM == sumN) { Console.WriteLine("\nВведите числа в матрицу\n"); for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { Console.Write("a[{0},{1}] = ", i, j); Console.ForegroundColor = ConsoleColor.Cyan; C[i, j].Value = Convert.ToInt32(Console.ReadLine()); // ввод значений в матрицу Console.ResetColor(); } } for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { if (max <= C[i, j].Value) // поиск максимального числа { max = C[i, j].Value; } } } max += 1; // прибавление 1 к максимальному числу for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { if (C[i, j].Value != 0) { C[i, j].Value = max - C[i, j].Value; } } } i = j = 0; while (i < n && j < m) // цикл для северозападного метода { try { if (a[i] == 0) { i++; } if (b[j] == 0) { j++; } if (a[i] == 0 && b[j] == 0) { i++; j++; } C[i, j].Delivery = Element.FindMinElement(a[i], b[j]); a[i] -= C[i, j].Delivery; b[j] -= C[i, j].Delivery; } catch { } } //выводим массив на экран Console.WriteLine("\nКонечная матрица\n"); for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { if (C[i, j].Delivery != 0) { if (j == 0) { Console.Write("|"); } Console.ForegroundColor = ConsoleColor.DarkCyan; Console.Write(" {0}", C[i, j].Value); Console.ForegroundColor = ConsoleColor.DarkGreen; Console.Write("({0})", C[i, j].Delivery); Console.ResetColor(); Console.Write(" |"); } else { if (j == 0) { Console.Write("|"); } Console.Write(" {0}({1})", C[i, j].Value, C[i, j].Delivery); Console.Write(" |"); } } Console.WriteLine(); } int ResultFunction = 0; //считаем целевую функцию for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { ResultFunction += (C[i, j].Value * C[i, j].Delivery); } } Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine(" \nОтвет = {0} у.д.е", ResultFunction); Console.ResetColor(); i = 0; j = 0; int[] u = new int[n]; int[] v = new int[m]; } else { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("M не равно N"); } Console.WriteLine("\nВведите y для продолжения или любой другой символ для выхода"); vixod = Console.ReadLine(); } catch (Exception) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("\nПроверьте введенные данные\n"); } } while (vixod == "y"); } } }