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
  • 相关阅读:
    django form表单验证
    Django messages框架
    pymysql 操作数据库
    python数据类型详解及列表字典集合推导式详解
    深入flask中的request
    修改sqlarchemy源码使其支持jdbc连接mysql
    深入理解Python中协程的应用机制: 使用纯Python来实现一个操作系统吧!!
    svg坐标转换
    近几年总结
    frp中的json模块
  • 原文地址:https://www.cnblogs.com/hehe54321/p/8622299.html
Copyright © 2011-2022 走看看