• 高斯消元学习


    高斯消元学习

    致敬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 约数研究
  • 相关阅读:
    Java学习笔记之——封装
    Java学习笔记之——String和Arrays常用方法
    Flask+uwsgi+virtualenv环境配置
    shell常用函数封装-main.sh
    APK模式下,epg版本升级,需要做同步
    cboss升级顺序
    Mariadb使用xtrabackup工具备份数据脚本
    Seaweedfs-启动脚本
    运营商-工作内容调整记录
    MSC服务器-主从检测脚本-check_server_state.sh
  • 原文地址:https://www.cnblogs.com/cjoierljl/p/9391588.html
Copyright © 2020-2023  润新知