高斯消元(模板)
Posted 1129-tangqiyuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高斯消元(模板)相关的知识,希望对你有一定的参考价值。
传送门:https://www.luogu.org/problem/P3389
其他的博客会讲的很清晰本蒟蒻就退下了
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n; 4 double b[109][109]; 5 const double esp=1e-18; 6 double ans[109]; 7 int main() 8 { 9 scanf("%d",&n); 10 for(int i=1;i<=n;i++) 11 { 12 for(int j=1;j<=n+1;j++) 13 { 14 scanf("%lf",&b[i][j]); 15 } 16 } 17 for(int i=1;i<=n;i++) 18 { 19 int pos=i; 20 for(int j=i;j<=n;j++) 21 { 22 if(fabs(b[pos][i])-fabs(b[j][i])<esp) 23 { 24 pos=j; 25 } 26 } 27 if(fabs(b[pos][i])<esp) 28 { 29 puts("No Solution"); 30 return 0; 31 } 32 double div=b[i][i]; 33 for(int j=i;j<=n+1;j++) 34 { 35 b[i][j]/=div;//将当前系数化一 36 } 37 for(int j=i+1;j<=n;j++) 38 { 39 div=b[j][i]; 40 for(int k=i;k<=n+1;k++) 41 { 42 b[j][k]-=b[i][k]*div; 43 } 44 } 45 } 46 /* 47 这个时候的b数组是这个样子的 48 1 x x x | x 49 0 1 x x | x 50 0 0 1 x | x 51 0 0 0 1 | x 52 */ 53 ans[n]=b[n][n+1];//所以只能先确定最后一个解 54 for(int i=n-1;i>=1;i--) 55 { 56 ans[i]=b[i][n+1]; 57 for(int j=i+1;j<=n;j++) 58 { 59 ans[i]-=(b[i][j]*ans[j]);//减去前面的解和它相应的系数 60 } 61 } 62 for(int i=1;i<=n;i++) 63 { 64 printf("%.2lf ",ans[i]); 65 } 66 }
以上是关于高斯消元(模板)的主要内容,如果未能解决你的问题,请参考以下文章