• 高斯消元模板


    详解参照其他博客,简单模板如下

     1 /*处理出的倒三角是这个形状的
     2 x1 x2 x3=..
     3    x2 x3=..
     4       x3=..
     5 */
     6 #include<bits/stdc++.h>
     7 #define N 205
     8 using namespace std;
     9 const double eps=1e-8;
    10 int n;
    11 double a[N][N],del;
    12 bool gauss(){
    13     for(int i=1;i<=n;i++){//处理第i列,行也处理到i 
    14         int k=i;//i:当前处理的列 和 行 
    15         for(int j=i+1;j<=n;j++)if(fabs(a[j][i])>fabs(a[k][i]))k=j;//找到i列最大的系数在的行 
    16         if(fabs(del=a[k][i])<eps)return 0;//最大数的行都为0,无解或多解     del:i列最大系数 
    17         for(int j=i;j<=n+1;j++)swap(a[i][j],a[k][j]);//交换两行,将大的换到上面去,底下开始消元 
    18         for(int j=i;j<=n+1;j++)a[i][j]/=del;//最大系数化为 1 
    19         for(k=1;k<=n;k++)if(k!=i){
    20             del=a[k][i];
    21             for(int j=i;j<=n+1;j++)a[k][j]-=a[i][j]*del;//也可看做a[k][j]=a[k][j]/del-a[i][j]
    22             //即把a[k][i]也系数化为1,再减去i行,显然k的第i列变成0了,即达到了消元的目的 
    23         }
    24     }
    25     return 1;
    26 }
    27 int main(){
    28     scanf("%d",&n);
    29     for(int i=1;i<=n;i++)
    30     for(int j=1;j<=n+1;j++)
    31         scanf("%lf",&a[i][j]);
    32     bool flag=gauss();
    33     if(!flag) puts("No Solution");
    34     else 
    35     {
    36         for(int i=1;i<=n;i++)
    37             printf("%.2lf
    ",a[i][n+1]);
    38     }
    39     return 0;
    40 }
  • 相关阅读:
    积木游戏
    斐波那契公倍数
    莫比乌斯反演,狄利克雷卷积,杜教筛
    CF932E Team Work
    【算法学习/数据结构】李超树
    【算法笔记/数学内容】博弈论-从入土到入土
    瞎几把写的cspj题解
    【算法笔记】数位dp
    【算法笔记】树形dp
    攻防世界-WEB相关writeup-3
  • 原文地址:https://www.cnblogs.com/71-111/p/9463992.html
Copyright © 2020-2023  润新知