Поменять местами элементы строк матрицы - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день! Подскажите, кто знает, допустим вводим в консоль матрицу типа 1 2 1 6 4 3 7 7 1 как переставить элементы строк матрицы так, чтобы сумма столбцов была примерно одинакова 1 1 2 6 4 7 3 7 1 Заранее спасибо

Решение задачи: «Поменять местами элементы строк матрицы»

textual
Листинг программы
  1. static void Main()
  2. {
  3.     int[,] A =
  4.     {
  5.         {1, 2, 1},
  6.         {6, 4, 3},
  7.         {7, 7, 1}
  8.     };
  9.     //A.Dump();
  10.     Optimize(A);
  11.     //A.Dump();
  12. }
  13.  
  14. static void Optimize(int[,] matrix)
  15. {
  16.     int[] sums = InitializeColumnSums(matrix);
  17.     while (Improve(matrix, sums, sums.Min(), sums.Max())) ;
  18. }
  19.  
  20. static bool Improve(int[,] matrix, int[] sums, int min, int max)
  21. {
  22.     if (min == max)
  23.         return false;
  24.     for (int y1 = 0; y1 < matrix.GetLength(0); y1++)
  25.         for (int x1 = 0; x1 < matrix.GetLength(1); x1++)
  26.         {
  27.             if (sums[x1] != min && sums[x1] != max)
  28.                 continue;
  29.             for (int x2 = 0; x2 < matrix.GetLength(1); x2++)
  30.             {
  31.                 for (int y2 = 0; y2 < matrix.GetLength(0); y2++)
  32.                 {
  33.                     if (matrix[y1, x1] == matrix[y2, x2])
  34.                         continue;
  35.                     int sum1 = sums[x1] - matrix[y1, x1] + matrix[y2, x2];
  36.                     int sum2 = sums[x2] - matrix[y2, x2] + matrix[y1, x1];
  37.                     if (sum1 > min && sum1 < max && sum2 > min && sum2 < max)
  38.                     {
  39.                         Swap(ref matrix[y1, x1], ref matrix[y2, x2]);
  40.                         sums[x1] = sum1;
  41.                         sums[x2] = sum2;
  42.                         return true;
  43.                     }
  44.                 }
  45.             }
  46.         }
  47.     return false;
  48. }
  49.  
  50. static void Swap<T>(ref T a, ref T b)
  51. {
  52.     var t = a;
  53.     a = b;
  54.     b = t;
  55. }
  56.  
  57. static int[] InitializeColumnSums(int[,] matrix)
  58. {
  59.     var sums = new int[matrix.GetLength(1)];
  60.     for (int y = 0; y < matrix.GetLength(0); y++)
  61.         for (int x = 0; x < matrix.GetLength(1); x++)
  62.             sums[x] += matrix[y, x];
  63.     return sums;
  64. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.923 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы