ACWING883. 高斯消元解线性方程组

ACWING883. 高斯消元解线性方程组

原题链接

描述

给定 n 个方程 n 个未知数的线性方程组,求解它。

思路

高斯消元模板题。

代码

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const double eps=1e-6;
const int N=110;
double a[N][N];
int n;
int gauss(){
    int c,r;
    for(c=0,r=0;c<n;c++){
        int t=r;
        for(int i=r+1;i<n;i++){
            if(fabs(a[i][c])>fabs(a[t][c])) t=i;
        }
        if(fabs(a[t][c])<eps) continue;
        for(int i=c;i<=n;i++){
            swap(a[t][i],a[r][i]);
        }
        for(int i=n;i>=c;i--){
            a[r][i]/=a[r][c];
        }
        for(int i=r+1;i<n;i++)
            if(fabs(a[i][c])>eps)
                for(int j=n;j>=c;j--)
                    a[i][j] -= a[r][j]*a[i][c];
        
        r++;
    }
    if(r<n){
        for(int i=r;i<n;i++)
            if(fabs(a[i][n])>eps)
                return 2;
        return 1;
    }
    for(int i=n-1;i>=0;i--){
            for(int j=i+1;j<n;j++){
                a[i][n]-=a[i][j]*a[j][n];
            }
        }
    return 0;
}
int main() {
    cin>>n;
    for(int i=0;i<n;i++){
        for(int j=0;j<n+1;j++){
            cin>>a[i][j];
        }
    }
    int t=gauss();
    if(t==0){
        for(int i=0;i<n;i++) printf("%.2lf\n",a[i][n]);
    }else if(t==1){
        puts("Infinite group solutions");
    }else {
        puts("No solution");
    }
    return 0;
}
posted @ 2021-01-24 18:39  ans20xx  阅读(38)  评论(0)    收藏  举报