123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- 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");
- }
- }
- }
|