zoukankan      html  css  js  c++  java
  • 洛谷 P3389 【模板】高斯消元法

    以下这个好像叫高斯约旦消元法,没有回代

    https://www.luogu.org/blog/37781/solution-p3389

    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #define eps 1e-7
    using namespace std;
    double a[110][110];
    int n;
    void swap_line(int x,int y)
    {
        for(int i=1;i<=n+1;i++)    swap(a[x][i],a[y][i]);
    }
    int dcmp(double x)
    {
        if(fabs(x)<eps)    return 0;
        else    return x>0?1:-1;
    }
    int main()
    {
        int i,j,k,nx;double nmax,t;
        scanf("%d",&n);
        for(i=1;i<=n;i++)
            for(j=1;j<=n+1;j++)
                scanf("%lf",&a[i][j]);
        for(i=1;i<=n;i++)
        {
            nmax=0;
            for(j=i;j<=n;j++)
                if(fabs(a[j][i])>fabs(nmax))
                {
                    nmax=a[j][i];
                    nx=j;
                }
            if(dcmp(nmax)==0)
            {
                puts("No Solution");
                return 0;
            }
            swap_line(nx,i);
            for(j=1;j<=n+1;j++)    a[i][j]/=nmax;
            for(j=1;j<=n;j++)
                if(j!=i)
                {
                    t=a[j][i]/a[i][i];//可以直接t=a[j][i];因为a[i][i]一定是1
                    for(k=1;k<=n+1;k++)
                        a[j][k]-=t*a[i][k];
                }
        }
        for(i=1;i<=n;i++)    printf("%.2lf
    ",a[i][n+1]);
        return 0;
    }

    还可以卡常

    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #define eps 1e-7
    using namespace std;
    double a[110][110];
    int n;
    void swap_line(int x,int y)
    {
        for(int i=1;i<=n+1;i++)    swap(a[x][i],a[y][i]);
    }
    int dcmp(double x)
    {
        if(fabs(x)<eps)    return 0;
        else    return x>0?1:-1;
    }
    int main()
    {
        int i,j,k,nx;double nmax;
        scanf("%d",&n);
        for(i=1;i<=n;i++)
            for(j=1;j<=n+1;j++)
                scanf("%lf",&a[i][j]);
        for(i=1;i<=n;i++)
        {
            nmax=0;
            for(j=i;j<=n;j++)
                if(fabs(a[j][i])>fabs(nmax))
                {
                    nmax=a[j][i];
                    nx=j;
                }
            if(dcmp(nmax)==0)
            {
                puts("No Solution");
                return 0;
            }
            swap_line(nx,i);
            for(j=i+1;j<=n+1;j++)    a[i][j]/=nmax;
            for(j=1;j<=n;j++)
                if(j!=i)
                    for(k=i+1;k<=n+1;k++)
                        a[j][k]-=a[j][i]*a[i][k];
        }
        for(i=1;i<=n;i++)    printf("%.2lf
    ",a[i][n+1]);
        return 0;
    }
    View Code
  • 相关阅读:
    ubuntu重复登录问题
    CUDA相关问题
    pytorch安装(使用pip3装到conda环境下)
    ubuntu16.04 anaconda的安装和卸载
    vscode插件安装失败的解决方案
    使用ffmpeg进行视频截图
    Spring加载早期获取BasePackage
    chrome最耐看的主题
    针对MySQL的MVCC多版本并发控制的一些总结
    docker创建mysql容器,并挂载数据+配置
  • 原文地址:https://www.cnblogs.com/hehe54321/p/8622299.html
Copyright © 2011-2022 走看看