高斯消元

高斯消元其实就是把增广矩阵化成三角矩阵的形状,然后回代答案的过程

有自由元即无唯一解

模板题

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
#define fi first
#define se second
#define debug printf("aaaaaaaaaaa\n");
const int maxn=1e2+5,inf=0x3f3f3f3f,mod=51123987,mul=233;
const ll INF=0x3f3f3f3f3f3f3f3f;
const double eps=1e-7;
int n;
double a[maxn][maxn],x[maxn];
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n+1;j++){
            scanf("%lf",&a[i][j]);
        }
    }
    for(int i=1,pos;i<=n;i++){
        for(pos=i;pos<=n;pos++){
            if(fabs(a[pos][i])>eps){
                break;
            }
        }
        if(pos==n+1){
            printf("No Solution\n");
            return 0;
        }
        for(int j=1;j<=n+1;j++){
            swap(a[pos][j],a[i][j]);
        }
        for(int j=i+1;j<=n;j++){
            double p=a[j][i]/a[i][i];
            for(int k=i;k<=n+1;k++){
                a[j][k]-=p*a[i][k];
            }
        }
    }
    for(int i=n;i>=1;i--){
        x[i]=a[i][n+1];
        for(int j=i+1;j<=n;j++){
            x[i]-=x[j]*a[i][j];
        }
        x[i]/=a[i][i];
    }
    for(int i=1;i<=n;i++){
        printf("%.2f\n",x[i]);
    }
    return 0;
}

不摆烂了,写题
原文地址:https://www.cnblogs.com/hunxuewangzi/p/15072513.html