#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% безопасен при программировании без проверок безопасности, инверсия на основе определителей проще и безопаснее.