1013: [JSOI2008]球形空间产生器sphere

来源:互联网 发布:unity3d无缝地图 编辑:程序博客网 时间:2024/06/10 06:02

题解

高斯消元的模板题

前言

今天早上学矩阵树的时候才发现我一直不会高斯消元
高一上学期都过了一大半了。。
都没有一个我高斯消元的板子。。(其实是我一直都没有学)
感觉很惭愧的。。大家小学都会的东西,我现在才会
于是就有了我高斯消元的板子

CODE:

#include<cstdio>#include<cstring>const int N=15;int n;double f[N][N];double s[N][N];double ans[N];void Guass ()//高斯消元{    for (int u=2;u<=n;u++)    {        for (int i=u;i<=n;i++)//第几个方程         {            double g=s[i][u-1]/s[u-1][u-1];            for (int j=u;j<=n+1;j++)                s[i][j]=g*s[u-1][j]-s[i][j];        }    }    for (int u=n;u>=1;u--)    {        ans[u]=s[u][n+1];        for (int i=u+1;i<=n;i++)            ans[u]=ans[u]-ans[i]*s[u][i];        ans[u]=ans[u]/s[u][u];    }}int main(){    scanf("%d",&n);    for (int u=1;u<=n+1;u++)        for (int i=1;i<=n;i++)            scanf("%lf",&f[u][i]);    for (int u=1;u<=n;u++)    {        for (int i=1;i<=n;i++)        {            s[u][i]=(f[u+1][i]-f[u][i])*2;//等式左边的各个未知数的系数            s[u][n+1]+=f[u+1][i]*f[u+1][i]-f[u][i]*f[u][i];//右边的常数项        }    }    Guass();    for (int u=1;u<n;u++) printf("%.3lf ",ans[u]);    printf("%.3lf\n",ans[n]);    return 0;}