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;
    }
    
  • 相关阅读:
    [CF1198D] Rectangle Painting 1
    [CF696B] Puzzles
    [CF540D] Bad Luck Island
    [P1654] OSU!
    [P6154] 游走
    [CF1265E] Beautiful Mirrors
    [CF920F] SUM and REPLACE
    [CF453B] Little Pony and Harmony Chest
    [CF808D] Array Division
    [CF1155D] Beautiful Array
  • 原文地址:https://www.cnblogs.com/YDDDD/p/11452617.html
Copyright © 2011-2022 走看看