Поменять местами элементы строк матрицы - 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;
}

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


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

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

13   голосов , оценка 3.923 из 5
Похожие ответы