高斯消元 - 洛谷P3389
阿新 • • 發佈:2021-07-18
高斯消元模板
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<queue> using namespace std; double a[1010][1010]; int n; int flag=0; void print() { int i,j; for(i=1;i<=n;i++) { for(j=1;j<=n+1;j++) { printf("%f ,",a[i][j]); } printf("\n"); } } void swaprow(int now,int maxrow) { double tmp; for(int i=now;i<=n+1;i++) { tmp=a[now][i]; a[now][i]=a[maxrow][i]; a[maxrow][i]=tmp; } return; } void Gauss() { double tmp; int maxrow;for(int j=1;j<=n;j++) { maxrow=j; for(int i=j;i<=n;i++) { if(fabs(a[i][j])>fabs(a[maxrow][j])) maxrow=i; if(fabs(a[i][j])<1e-7) { flag=1; return; } }//Ñ¡ÔñÖ÷Ôª if(maxrow!=j) { swaprow(j,maxrow); } for(int i=j+1;i<=n;i++) { tmp=a[i][j]/a[j][j]; for(int k=j;k<=n+1;k++) { a[i][k]-=a[j][k]*tmp; } } //print(); //cout<<endl; } for(int i=n;i>=1;i--) { for(int j=i+1;j<=n;j++) a[i][n+1]-=a[i][j]*a[j][n+1]; a[i][n+1]/=a[i][i]; } return ; } int main() { cin>>n; for(int i=1;i<=n;i++) { for(int j=1;j<=n+1;j++) { cin>>a[i][j]; } } Gauss(); if(flag) { cout<<"No Solution"; return 0; } for(int i=1;i<=n;i++) { printf("%.2lf\n",a[i][n+1]); } return 0; }