【BZOJ1013】球形空间产生器sphere
高斯消元模板题
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <iostream> 5 #include <cmath> 6 7 using namespace std; 8 9 const int maxn=30; 10 const double EPS=1e-9; 11 double G[maxn][maxn]; 12 double a[maxn][maxn]; 13 double ans[maxn]; 14 int n; 15 double g; 16 void gauss_jordan(){ 17 int num; 18 for(int i=1;i<n;i++){ 19 num=i; 20 for(int j=i+1;j<=n;j++){ 21 if(fabs(a[j][i])>fabs(a[num][i])) 22 num=j; 23 } 24 for(int j=1;j<=n+1;j++) 25 swap(a[i][j],a[num][j]); 26 for(int j=i+1;j<=n;j++){ 27 if(fabs(a[j][i])<=EPS)continue; 28 double t=a[j][i]/a[i][i]; 29 for(int k=i;k<=n+1;k++){ 30 a[j][k]-=a[i][k]*t; 31 } 32 } 33 } 34 for(int i=n;i>=1;i--){ 35 ans[i]=a[i][n+1]/a[i][i]; 36 for(int j=i-1;j>=1;j--){ 37 a[j][n+1]-=a[j][i]*ans[i]; 38 } 39 } 40 } 41 int main(){ 42 scanf("%d",&n); 43 for(int i=1;i<=n+1;i++){ 44 for(int j=1;j<=n;j++){ 45 scanf("%lf",&g); 46 G[i][j]+=-2.0*g; 47 G[i][n+1]+=g*g; 48 } 49 } 50 for(int i=1;i<=n;i++){ 51 for(int l=1;l<=n+1;l++){ 52 a[i][l]=G[i][l]-G[i+1][l]; 53 } 54 a[i][n+1]=-a[i][n+1]; 55 56 } 57 58 /*for(int i=1;i<=n;i++){ 59 for(int j=1;j<=n+1;j++){ 60 printf("%.1f ",a[i][j]); 61 } 62 printf("\n"); 63 }*/ 64 gauss_jordan(); 65 for(int i=1;i<=n;i++){ 66 printf("%.3f ",ans[i]); 67 } 68 69 return 0; 70 }