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

    链接:

    https://www.luogu.org/problem/P3389

    题意:

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

    思路:

    高斯消元,从第一项消到最后一项,消成一个上三角矩阵.再从最后一项依次向上回带.
    在消每一项的时候找到系数最大的一项开始消,将其系数置位1,再向下消,具体做法百度太多了.

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    
    double Map[110][110];
    double ans[110];
    double eps = 1e-7;
    int n;
    
    
    bool Guess()
    {
        for (int i = 1;i <= n;i++)
        {
            int ml = i;
            for (int j = i+1;j <= n;j++)
            {
                if (fabs(Map[ml][i]) < fabs(Map[j][i]))
                    ml = j;
            }
            if (fabs(Map[ml][i]) < eps)
                return false;
            if (ml != i)
                swap(Map[ml], Map[i]);//换行
            double div = Map[i][i];
            for (int j = i+1;j <= n+1;j++)
                Map[i][j] /= div;//讲要消的列系数变为1
            for (int j = i+1;j <= n;j++)
            {
                div = Map[j][i];//消的值对应系数
                for (int k = i;k <= n+1;k++)
                    Map[j][k] -= div*Map[i][k];//消元
            }
        }
        ans[n] = Map[n][n+1];
        //回带
        for (int i = n-1;i >= 1;i--)
        {
            ans[i] = Map[i][n+1];
            for (int j = i+1;j <= n;j++)
                ans[i] -= (Map[i][j]*ans[j]);
        }
    }
    
    int main()
    {
        scanf("%d", &n);
        for (int i = 1;i <= n;i++)
        {
            for (int j = 1;j <= n+1;j++)
                scanf("%lf", &Map[i][j]);
        }
        if (Guess())
        {
            for (int i = 1;i <= n;i++)
                printf("%.2lf
    ", ans[i]);
        }
        else
            printf("No Solution");
    
        return 0;
    }
    
  • 相关阅读:
    JS
    JS
    JS
    CSS
    CSS
    CSS
    NPOI导出自动换行效果
    Httpcookie的简单应用
    前台JS设置Cookies后台读取刚设置的Cookies
    SQL SERVER 如何调试存储过程
  • 原文地址:https://www.cnblogs.com/YDDDD/p/11452617.html
Copyright © 2011-2022 走看看