行列式求值

来源:互联网 发布:免费彩票数据接口 编辑:程序博客网 时间:2024/04/30 10:52

O(n^3)的算法,利用了行列式的性质。

#include<cstdio>#include<iostream>#define N 19using namespace std;double a[N][N];int n;double calcudet(){int out;int i,j;double k,result=1;    for(out=0;out<n;out++){                                   //外层阶数循环     for(i=out;i<n;i++){                                   //寻找第一项不为零的行    if(a[i][out]==0) continue;        for(j=out;j<n;j++){                            //第一项不为零的行与顶行交换         k=a[i][j];a[i][j]=a[out][j];a[out][j]=k;        }        if(i==out){        result*=a[out][out];         }        else{result*=-a[out][out]; }                   //结果变号         break;}    if(i==n) return 0;        if(a[out][out]!=1)    for(j=out+1;j<n;j++)                                 //将第一项变为1     a[out][j]/=a[out][out];        a[out][out]=1;        for(i=out+1;i<n;i++)                                     //将该列其余项消为0     for(j=out+1;j<n;j++)    a[i][j]-=a[i][out]*a[out][j];    }    return result;}int main(){int i,j;scanf("%d",&n);for(i=0;i<n;i++){for(j=0;j<n;j++){scanf("%lf",&a[i][j]);}}cout<<calcudet();return 0;}


原创粉丝点击