Поменять местами элементы строк матрицы - C#
Формулировка задачи:
Добрый день! Подскажите, кто знает, допустим вводим в консоль матрицу типа
1 2 1
6 4 3
7 7 1
как переставить элементы строк матрицы так, чтобы сумма столбцов была примерно одинакова
1 1 2
6 4 7
3 7 1
Заранее спасибо
Решение задачи: «Поменять местами элементы строк матрицы»
textual
Листинг программы
- static void Main()
- {
- int[,] A =
- {
- {1, 2, 1},
- {6, 4, 3},
- {7, 7, 1}
- };
- //A.Dump();
- Optimize(A);
- //A.Dump();
- }
- static void Optimize(int[,] matrix)
- {
- int[] sums = InitializeColumnSums(matrix);
- while (Improve(matrix, sums, sums.Min(), sums.Max())) ;
- }
- static bool Improve(int[,] matrix, int[] sums, int min, int max)
- {
- if (min == max)
- return false;
- for (int y1 = 0; y1 < matrix.GetLength(0); y1++)
- for (int x1 = 0; x1 < matrix.GetLength(1); x1++)
- {
- if (sums[x1] != min && sums[x1] != max)
- continue;
- for (int x2 = 0; x2 < matrix.GetLength(1); x2++)
- {
- for (int y2 = 0; y2 < matrix.GetLength(0); y2++)
- {
- if (matrix[y1, x1] == matrix[y2, x2])
- continue;
- int sum1 = sums[x1] - matrix[y1, x1] + matrix[y2, x2];
- int sum2 = sums[x2] - matrix[y2, x2] + matrix[y1, x1];
- if (sum1 > min && sum1 < max && sum2 > min && sum2 < max)
- {
- Swap(ref matrix[y1, x1], ref matrix[y2, x2]);
- sums[x1] = sum1;
- sums[x2] = sum2;
- return true;
- }
- }
- }
- }
- return false;
- }
- static void Swap<T>(ref T a, ref T b)
- {
- var t = a;
- a = b;
- b = t;
- }
- static int[] InitializeColumnSums(int[,] matrix)
- {
- var sums = new int[matrix.GetLength(1)];
- for (int y = 0; y < matrix.GetLength(0); y++)
- for (int x = 0; x < matrix.GetLength(1); x++)
- sums[x] += matrix[y, x];
- return sums;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д