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
  • 相关阅读:
    互联网对实体经济的三轮冲击
    虎嗅网
    RabbitMQ实战-死信队列
    RabbitMQ实战
    Hadoop之MapReduce流程
    Hadoop之HDFS读写流程
    GitHub预览网页[2019最新]
    Java操作Hadoop集群
    Hadoop分布式集群搭建
    Hadoop Local(本地)模式搭建
  • 原文地址:https://www.cnblogs.com/hehe54321/p/8622299.html
Copyright © 2011-2022 走看看