P3389 模板高斯消元法
Posted zbsy-wwx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P3389 模板高斯消元法相关的知识,希望对你有一定的参考价值。
注意点:
- 模拟.
#include<cstdio> #include<iostream> #include<cmath> using namespace std; const double eps=1e-7; const int MAXN=2e2; double map[MAXN][MAXN]; double ans[MAXN]; int main(){ int n; cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<=n+1;j++) scanf("%lf",&map[i][j]);//读入方程组 for(int i=1;i<=n;i++){//枚举每一个元 int r=i;//选择哪一个方程 for(int j=i+1;j<=n;j++)//i之前的都已经排好了 if(fabs(map[r][i])<fabs(map[j][i])) r=j; //找系数绝对值最大的方程 if(fabs(map[r][i])<eps){//存在自由元 printf("No Solution");//无解 return 0; } if(i!=r)swap(map[i],map[r]);//优先利用系数绝对值更大的方程 double div=map[i][i];//系数除数 for(int j=i;j<=n+1;j++)//枚举下面的每个方程 map[i][j]/=div; for(int j=i+1;j<=n;j++){ div=map[j][i]; for(int k=i;k<=n+1;k++) map[j][k]-=map[i][k]*div; } } ans[n]=map[n][n+1]; for(int i=n-1;i>=1;i--){//带回到原方程组 ans[i]=map[i][n+1];//x_i的具体值 for(int j=i+1;j<=n;j++) ans[i]-=(map[i][j]*ans[j]); } for(int i=1;i<=n;i++) printf("%.2lf ",ans[i]); return 0; }
以上是关于P3389 模板高斯消元法的主要内容,如果未能解决你的问题,请参考以下文章