1013: [JSOI2008]球形空间产生器sphere 高斯消元

来源:互联网 发布:尹成c语言网盘 2016 编辑:程序博客网 时间:2024/06/05 09:53

第一次写高斯消元。
高斯消元就是通过不断的消去然后回代解n元一次方程组。
本题可以根据距离得到n个方程,然后上gauss就好了。

#include<cstdio>#include<cstring>#include<cmath>#define eps 1e-6using namespace std;int n;double f[15];double a[15][15];inline double sqr(double x){    return x*x;}void gauss(){    int y;    double t;    for (int i=1;i<=n;i++)    {        for (y=i;y<=n;y++)             if (fabs(a[y][i])>eps) break;        if (y>n) continue;        if (y!=i)             for (int j=1;j<=n+1;j++) swap(a[i][j],a[y][j]);        t=a[i][i];        for (int j=1;j<=n+1;j++) a[i][j]/=t;        for (int j=1;j<=n;j++)            if (j!=i)            {                t=a[j][i];                for (int k=1;k<=n+1;k++)                    a[j][k]-=t*a[i][k];            }    }}int main(){    scanf("%d",&n);    for (int i=1;i<=n;i++) scanf("%lf",&f[i]);    for (int i=1;i<=n;i++)        for (int j=1;j<=n;j++)        {            double t;            scanf("%lf",&t);            a[i][j]=2*(t-f[j]);            a[i][n+1]+=sqr(t)-sqr(f[j]);        }    gauss();    for (int i=1;i<n;i++) printf("%.3lf ",a[i][n+1]);    printf("%.3lf\n",a[n][n+1]);    return 0;}
0 0