const int maxn=305;
long double a[maxn][maxn];
const long double eps=1e-14;
int main()
{
for(int i=1;i<=n;i++)
{
int p=i;
for(int j=i+1;j<=n;j++)
if(fabs(a[j][i])>eps) p=j;//找一个这一列不等于0的数
if(fabs(a[p][i])>eps)
{
for(int j=i;j<=n+1;j++) swap(a[i][j],a[p][j]);
for(int j=i+1;j<=n;j++)
{
if(fabs(a[j][i])>eps)
{
long double k=a[j][i]/a[i][i];
for(int t=i;t<=n+1;t++)
a[j][t]-=a[i][t]*k;//消去这一列的其他数
}
}
}
}
for(int i=n;i>=1;i--)
{
for(int j=i+1;j<=n;j++) if(fabs(a[i][j])>eps)
a[i][n+1]-=a[i][j]*a[j][n+1];
if(abs(a[i][i])<=eps&&abs(a[i][n+1])>eps)
{
cout<<-1<<endl;
return 0;
}
a[i][n+1]/=a[i][i];
}
}
高斯消元模板
最新推荐文章于 2021-03-07 08:51:31 发布