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

    题目背景

    Gauss消元

    题目描述

    给定一个线性方程组,对其求解

    输入输出格式

    输入格式:

    第一行,一个正整数 nnn

    第二至 n+1n+1n+1 行,每行 n+1n+1n+1 个整数,为 a1,a2⋯an a_1, a_2 cdots a_na1,a2anbbb ,代表一组方程。

    输出格式:

    共n行,每行一个数,第 iii 行为 xix_ixi (保留2位小数)

    如果不存在唯一解,在第一行输出"No Solution".

    思路:

    高斯消元是一种求解线性方程组的形式他将一个完全的矩阵变为一个上三角矩阵,从而得到结果

    方法看这里: 

     我不会发ppt,所以给大家一个网址,下载就可

     代码:

    #include<iostream>
    #include<cstdio>
    using namespace std;
    #define rii register int i
    #define rij register int j
    double x[105][105],ans[105];
    int n,gp;
    void gsxy(int wz)
    {
        double ltt=x[wz][wz];
        if(ltt==0)
        {
            gp=1;
            cout<<"No Solution";
            return;
        }
        for(rii=1;i<=n+1;i++)
        {
            x[wz][i]/=ltt;
        }
        for(rii=wz+1;i<=n;i++)
        {
            double kkk=x[i][wz];
            for(rij=1;j<=n+1;j++)
            {
                x[i][j]-=x[wz][j]*kkk;
            }
        }
        if(wz==n)
        {
            ans[n]=x[n][n+1];
        }
        else
        {
            gsxy(wz+1);
        }
    }
    void hd(int wz)
    {
        if(gp==1)
        {
            return ;
        }
        for(rii=wz-1;i>=1;i--)
        {
            double ltt=x[i][wz];
            x[i][wz]=0;
            x[i][n+1]-=ans[wz]*ltt;
        }
        ans[wz-1]=x[wz-1][n+1];
        if(wz==2)
        {
            return;
        }
        else
        {
            hd(wz-1);
        }
    }
    int main()
    {
        int inf=1<<29;
        cin>>n;
        for(rii=1;i<=n;i++)
        {
            ans[i]=-inf;
        }
        for(rii=1;i<=n;i++)
        {
            for(rij=1;j<=n+1;j++)
            {
                cin>>x[i][j];
            }
        }
        gsxy(1);
        hd(n);
        if(gp==1)
        {
            return 0;
        }
        for(rii=1;i<=n;i++)
        {
            printf("%.2lf
    ",ans[i]);
        }
    }
  • 相关阅读:
    安卓学习记录(五)——体温表APP.2
    今日学习
    每日学习
    AS插件快速生成javabean
    LA 5842 Equipment (状态压缩+dp)
    LA 4794 Sharing Chocolate (搜索)
    LA 5844 Leet (dfs 搜索)
    uva 11627 Slalom (二分法)
    ZOJ 3031 Robotruck (dp + 单调队列)
    uva 10012 How Big Is It? (greedy + enumerate)
  • 原文地址:https://www.cnblogs.com/ztz11/p/9252374.html
Copyright © 2011-2022 走看看