模板

高斯消元可以用来求解未知数个数与方程个数相等的线性方程组
无解或者有无穷多解时返回0,有唯一解时返回1
时间复杂度\(O(n^3)\)

const int maxn=60;
double a[maxn][maxn],ans[maxn];

int gauss(int n,int m){
    for(int row=0,col=0;row<n && col<m;row++,col++){
        int maxi=row;
        for(int i=row+1;i<n;i++){
            if(fabs(a[i][col])>fabs(a[maxi][col])) maxi=i;
        }
        if(fabs(a[maxi][col])<eps) return 0;
        if(row!=maxi){
            for(int j=col;j<m;j++) swap(a[row][j],a[maxi][j]);
            swap(ans[row],ans[maxi]);
        }
        ans[row]/=a[row][col];
        for(int j=col+1;j<m;j++) a[row][j]/=a[row][col];
        a[row][col]=1;
        for(int i=0;i<n;i++){
            if(i!=row){
                ans[i]-=ans[row]*a[i][col];
                for(int j=col+1;j<m;j++){
                    a[i][j]-=a[row][j]*a[i][col];
                }
                a[i][col]=0;
            }
        }
    }
    return 1;
}
posted @ 2020-07-19 21:34  fxq1304  阅读(47)  评论(0编辑  收藏  举报