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;
    }
    
  • 相关阅读:
    mem 预留内存
    关于内核反汇编,同时显示源文件
    读些笔记
    platform设备驱动
    glut 右键子菜单
    获取HINSTANCE
    window窗口样式style
    opengl 直线拾取
    glut弹出式菜单
    读取大恒采集卡c++代码
  • 原文地址:https://www.cnblogs.com/YDDDD/p/11452617.html
Copyright © 2011-2022 走看看