高斯消元—— 【模板】高斯消元法
2017-10-20 21:21
375 查看
题目来源
洛谷P3389 【模板】高斯消元法https://www.luogu.org/problem/show?pid=3389
代码(C++)
#include <cmath> #include <cstdio> #include <algorithm> using namespace std; int n,maxn; double a[110][110],maxx,t,ans[110]; int main() { scanf("%d",&n); for(int i=1;i<=n;++i) for(int j=1;j<=n+1;++j) scanf("%lf",&a[i][j]),a[i][j]*=1.000; for(int i=1;i<=n;++i) { maxx=a[i][i]; maxn=i; for(int j=i+1;j<=n;++j) if(abs(a[j][i])>maxx) maxx=abs(a[j][i]),maxn=j; for(int k=1;k<=n+1;++k) swap(a[i][k],a[maxn][k]); for(int j=i+1;j<=n;++j) { t=a[j][i]/a[i][i]; for(int k=i;k<=n+1;++k) a[j][k]-=t*a[i][k]; } } if(a ==0) { printf("No Solution"); return 0; } for(int i=n;i>=1;--i) { ans[i]=a[i][n+1]/a[i][i]; for(int j=i-1;j>=1;--j) a[j][n+1]-=a[j][i]*ans[i]; } for(int i=1;i<=n;++i) printf("%.2lf\n",ans[i]); return 0; }
相关文章推荐