123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- 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)
- {
- bool o = true;
- string s;
- while (o == true)
- {
- try
- {
- int i = 0;
- int j = 0;
- int x = 0;
- int y = 0;
- int n;
- int max = 0;
- int summa1 = 0;
- int summa2 = 0;
- bool check = true;
- Console.WriteLine("Первоначальное распределение по методу северо-западного угла \n" +
- " в транспортной задаче с учетом преобразования исходной матрицы \n" +
- " А в матрицу В по правилу: B = {max(эл) + 1} - А \n");
- Console.ForegroundColor = ConsoleColor.Blue;
- Console.WriteLine("Введите количество поставщиков");
- n = Convert.ToInt32(Console.ReadLine());
- int[] a = new int[n];
- Console.ForegroundColor = ConsoleColor.Red;
- Console.WriteLine();
- Console.WriteLine("Введите количество потребителей");
- int m = Convert.ToInt32(Console.ReadLine());
- int[] b = new int[m];
- Element[,] C = new Element[n, m];
- Console.ForegroundColor = ConsoleColor.DarkBlue;
- Console.WriteLine();
- while (check == true)
- {
- summa1 = 0;
- summa2 = 0;
- Console.WriteLine("Введите численные параметры поставщиков");
- for (i = 0; i < a.Length; i++)
- {
- x = i + 1;
- Console.Write($"Поставщик {x}: ");
- a[i] = Convert.ToInt32(Console.ReadLine());
- summa1 += a[i];
- }
- Console.ForegroundColor = ConsoleColor.DarkRed;
- Console.WriteLine();
- Console.WriteLine("Введите численные параметры потребителей");
- for (j = 0; j < b.Length; j++)
- {
- y = j + 1;
- Console.Write($"Потребитель {y}: ");
- b[j] = Convert.ToInt32(Console.ReadLine());
- summa2 += b[j];
- }
- if (summa1 == summa2)
- {
- check = false;
- }
- else if (summa1 != summa2)
- {
- check = true;
- }
- Console.Clear();
- }
- Console.ForegroundColor = ConsoleColor.White;
- Console.WriteLine();
- Console.WriteLine("Введите элементы матриц: ");
- for (i = 0; i < n; i++)
- {
- for (j = 0; j < m; j++)
- {
- Console.Write("a[{0},{1}] = ", i, j);
- Console.ForegroundColor = ConsoleColor.Red;
- 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;
- 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;
- // действуем по алгоритму
- // идём с северо-западного элемента
- // если a[i] = 0 i++
- // если b[j] = 0 j++
- // если a[i],b[j] = 0 то i++,j++;
- // доходим до последнего i , j
- 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)
- {
- Console.ForegroundColor = ConsoleColor.Blue;
- Console.Write("{0}", C[i, j].Value);
- Console.ForegroundColor = ConsoleColor.Red;
- Console.Write("({0})", C[i, j].Delivery); Console.ResetColor();
- }
- else
- Console.Write("{0}({1})", C[i, j].Value, C[i, j].Delivery);
- }
- 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.WriteLine(" F = {0}", ResultFunction);
- i = 0;
- j = 0;
- int[] u = new int[n];
- int[] v = new int[m];
- Console.WriteLine("Хотите продолжать работу?(да/нет)");
- s = Convert.ToString(Console.ReadLine());
- if (s == "да")
- {
- o = true;
- Console.Clear();
- }
- else if (s == "нет")
- {
- o = false;
- Environment.Exit(0);
- }
- else { Environment.Exit(0); }
- }
- catch(Exception)
- {
- Console.Clear();
- Console.ForegroundColor = ConsoleColor.Red;
- Console.WriteLine("!!!Ошибка!!!");
- Console.ForegroundColor = ConsoleColor.White;
- }
- }
- }
- }
- }
|