void GaussionEliminationMethod(long double* arr,int order,int offset)
{
for (int i = offset; i < order; i++)
{
if (arr[i * order + offset] == 0) continue;
for (int j = offset; j < order; j++)
{
if (i == j)break;
long double temp = arr[i * order + j];
arr[i * order + j] = arr[offset * order + j];
arr[offset * order + j] = temp;
}
break;
}
long double first = arr[offset * order + offset];
long double* ratio = new long double[order - offset - 1];
if (first == 0) goto A;
for (int i = offset + 1, idx = 0; i < order; i++, idx++)
ratio[idx] = -1 * arr[i * order + offset] / first;
for (int i = offset + 1, idx = 0; i < order; i++, idx++)
for (int j = offset; j < order; j++)
arr[i * order + j] += arr[offset * order + j] * ratio[idx];
A:delete[]ratio;
if (offset < order - 1)
GaussionEliminationMethod(arr, order, offset + 1);
}
arr是以行存储矩阵的一维数组,order是矩阵的维度,offset是每次递归的偏移量