其他分享
首页 > 其他分享> > 高斯消元 - 洛谷P3389

高斯消元 - 洛谷P3389

作者:互联网

高斯消元模板

 

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
double a[1010][1010];
int n;
int flag=0;

void print()
{
   int i,j;
   for(i=1;i<=n;i++)
    {
        for(j=1;j<=n+1;j++)
        {
            printf("%f ,",a[i][j]);
        }
        printf("\n");
    }
}

void swaprow(int now,int maxrow)
{
    double tmp;
    for(int i=now;i<=n+1;i++)
    {
        tmp=a[now][i];
        a[now][i]=a[maxrow][i];
        a[maxrow][i]=tmp;
    }
    return;
}

void Gauss()
{
    double tmp;
    int maxrow;
    for(int j=1;j<=n;j++)
    {
        maxrow=j;
        for(int i=j;i<=n;i++)
        {
            if(fabs(a[i][j])>fabs(a[maxrow][j]))
            maxrow=i;
            if(fabs(a[i][j])<1e-7)
            {
                flag=1;
                return;
             } 
        }//Ñ¡ÔñÖ÷Ôª
        if(maxrow!=j)
        {
            swaprow(j,maxrow);
        }
        for(int i=j+1;i<=n;i++)
        {
            tmp=a[i][j]/a[j][j];
            for(int k=j;k<=n+1;k++)
            {
                a[i][k]-=a[j][k]*tmp;
            }
        }
        //print();
        //cout<<endl;
    }
    for(int i=n;i>=1;i--)
    {
        for(int j=i+1;j<=n;j++)
            a[i][n+1]-=a[i][j]*a[j][n+1];
        a[i][n+1]/=a[i][i];
    }
    return ;
}

int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n+1;j++)
        {
            cin>>a[i][j];
        }
    }
    Gauss();
    if(flag)
    {
        cout<<"No Solution";
        return 0;
    }
    for(int i=1;i<=n;i++)
    {
        printf("%.2lf\n",a[i][n+1]);
    }
    return 0;
}

 

标签:洛谷,int,maxrow,flag,高斯消,include,1010,P3389
来源: https://www.cnblogs.com/lemonGJacky/p/15027212.html