高斯消元学习

高斯消元学习

致敬yyb

我的板子

以洛古的模板题为准……戳我

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iomanip>
#include<algorithm>
#include<ctime>
#include<queue>
#include<stack>
#include<vector>
#define rg register
#define il inline
#define lst long long
#define ldb long double
#define N 150
using namespace std;
const int Inf=1e9;

int n;
ldb g[N][N];

il int read()
{
    rg int s=0,m=0;rg char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')m=1;ch=getchar();}
    while(ch>='0'&&ch<='9')s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
    return m?-s:s;
}

int main()
{
    n=read();
    for(rg int i=1;i<=n;++i)
        for(rg int j=1;j<=n+1;++j)
            scanf("%Lf",&g[i][j]);
    //i是枚举的每一个方程 1~n
    //j是方程的每一项   1~n+1
    for(rg int k=1;k<=n;++k)//要消元的未知数(也同时是第几个方程)
    {
        rg int now=k;//每一个方程要把一个未知数消元
        for(rg int i=k+1;i<=n;++i)//找当前要处理的未知数的系数的最大值
            if(fabs(g[now][k])<fabs(g[i][k]))now=i;
        for(rg int j=k;j<=n+1;++j)//换到这一行来
            swap(g[now][j],g[k][j]);
        if(!g[k][k])//还没开始消元就没东西了,肯定无解
        {
            puts("No Solution");return 0;
        }
        for(rg int j=k+1;j<=n+1;++j)//系数化为1
            g[k][j]/=g[k][k];
        g[k][k]=1;
        for(rg int i=k+1;i<=n;++i)//其他每一个方程把这个元消掉(每一个方程的这个元置为0)
        {
            for(rg int j=k+1;j<=n+1;++j)
                g[i][j]-=g[i][k]*g[k][j];//一定要纸上画图模拟消元过程!
            g[i][k]=0;
        }
    }//每次做一个未知数的消元,最后剩下一个三角阵 yeh
    //每个方程回代求解
    for(rg int k=n;k>=1;--k)
    {
        for(rg int i=k+1;i<=n;++i)
        {
            g[k][n+1]-=g[k][i]*g[i][n+1];//没一个方程的n+1位置是对应未知数的答案(逐个往上消掉了)
            g[k][i]=0;//置为0,这一项已经经过回代变成常数并被减掉了 yeh
        }
        g[k][n+1]/=g[k][k];//除掉自己方程的系数(其实系数已经在上面被化为1了……)
        g[k][k]=1;
    }//每回代一个方程就解出一个未知数,最后留下的矩阵就是每个未知数的解了 yeh
    for(rg int i=1;i<=n;++i)
        printf("%.2Lf
",g[i][n+1]);
    return 0;
}

题单(来自xzy)

  • [ ] [hihoCoder]高斯消元·一
  • [ ] [hihoCoder]高斯消元·二
  • [x] [Luogu]【模板】高斯消元法
  • [ ] [USACO09NOV]灯Lights
  • [x] [SDOI2010]外星千足虫
  • [ ] [JSOI2008]球形空间产生器
  • [ ] [HNOI2013]游走
  • [ ] [HNOI2011]XOR和路径
  • [ ] [HDU]Time travel
  • [ ] BZOJ 2729 [HNOI2012]排队
  • [ ] BZOJ 4804 欧拉心算
  • [ ] BZOJ 1406 [AHOI2007]密码箱
  • [ ] Luogu 1414 又是毕业季II
  • [ ] Codeforces 113 D Museum
  • [ ] BZOJ 1178 [Usaco2010 Hol]Dotp 驱逐猪猡
  • [ ] BZOJ 3270 博物馆
  • [ ] BZOJ 4004 [JLOI2015]装备购买
  • [ ] HDU 3364 Lanterns
  • [ ] HDU 4870 Rating
  • [ ] HDU 4936 Rainbow Island
  • [ ] HDU 4592 Boring仪仗队
  • [ ] BZOJ 1968 [Ahoi2005]COMMON 约数研究
原文地址:https://www.cnblogs.com/cjoierljl/p/9391588.html