Алгоритм Гаусса для матрицы mxn

#c #algorithm #matrix

#c #алгоритм #матрица

Вопрос:

Приведенный ниже код работает до определенного момента, но некоторые строки матрицы должны отображаться в другой форме. Функции, которых не хватает, работают и просто изменяют и суммируют две строки. Матрица, с которой я работаю, имеет только 0 и 1.

 int Gauss_elimination(int **matrix, int lines, int columns){

    int i, j=0, k, pivot=0;
    while(j<columns amp;amp; pivot<lines){
        i=pivot;
        while((i<lines) amp;amp; (matrix[i][j]==0)){
            i  ;
        }
        if(i<lines){         
            if(i>pivot){
                Swap_lines(matrix, columns, i, pivot);
            }
            k=pivot 1;
            while(k<lines){
                if(matrix[k][j]==1){          
                    Sum_lines(matrix, columns, pivot, k);
                }
                k  ;
            }
            pivot  ;
        }
        j  ;
    }

    return;
}
  

Комментарии:

1. Обратите внимание, что 2D-массивы и двойные указатели не являются взаимозаменяемыми

2. Функция swap также была написана мной, я просто опустил код здесь.

3. 1. вы должны добавить комментарии к источнику, 2. вы должны сортировать строки перед GEM, чтобы избежать застревания (остерегайтесь линейных комбинаций строк и нулей). GEM не на 100% безопасен при программировании без проверок безопасности, инверсия на основе определителей проще и безопаснее.