Поменять местами элементы строк матрицы - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д