您的位置:首页 > Web前端 > JavaScript

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

2016-02-02 16:18 477 查看
第一次写高斯消元。

高斯消元就是通过不断的消去然后回代解n元一次方程组。

本题可以根据距离得到n个方程,然后上gauss就好了。

hljs perl">#include<cstdio>
#include<cstring>
#include<cmath>
#define eps 1e-6
using 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+1]);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: