1. 程式人生 > 其它 >高斯消元 - 洛谷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; }