luogu P3389 模板高斯消元法
Posted with-penguin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luogu P3389 模板高斯消元法相关的知识,希望对你有一定的参考价值。
高斯消元法(这里的好像叫约旦消元?)可以用来求线性方程组的唯一解(如果无解或有多解输出“No Solution”)。
具体方法就是一个一个变量的扫,每次处理一个变量的时候找出一个系数不为(0)的方程,用这个方程把其他方程的、这个变量的系数给消掉(具体看代码吧感觉不太能解释清楚)。然后每个变量处理完以后最后就剩那个一开始钦定的系数了,最后除一下就行了。
代码:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=109;
int n;
double a[N][N];
void init()
{
scanf("%d",&n);
for (int i=1;i<=n;i++)
for (int j=1;j<=n+1;j++)
scanf("%lf",&a[i][j]);
}
void work()
{
for (int j=1;j<=n;j++)
{
int Max=j;
for (int i=j+1;i<=n;i++)
if(fabs(a[i][j])>fabs(a[Max][j]))
Max=i;
if(a[Max][j]==0)
{
puts("No Solution");
return;
}
for (int k=1;k<=n+1;k++)
swap(a[Max][k],a[j][k]);
for (int i=1;i<=n;i++)
if(i!=j)
{
double tmp=a[i][j]/a[j][j];
for (int k=j+1;k<=n+1;k++)
a[i][k]-=a[j][k]*tmp;
}
}
for (int i=1;i<=n;i++)
printf("%.2lf
",a[i][n+1]/a[i][i]);
}
int main()
{
init();
work();
return 0;
}
以上是关于luogu P3389 模板高斯消元法的主要内容,如果未能解决你的问题,请参考以下文章