c++求行列式的值(全排列法)

用全排列的方式求行列式的值,递归体现在全排列中,上代码

f函数是求行列式的值

​
#include<iostream>
#define iIN(x,y) for(int i=x;i<y;i++)
#define jIN(x,y) for(int j=x;j<y;j++)
using namespace std;
int get_ni(int a[],int length) //得到序列a的逆
{
    int res=0;
    iIN(1,length)
    {
        jIN(0,i)
        {
            if(a[j]>a[i])res++;
        }
    }
    return res;
}
void all_sort(int a[],int now,int length,int(*metrix)[10],int &res)
{
    if(now==length-1)
    {
        int ji=1;
        for(int i=0;i<length;i++)
        {
            ji*=metrix[i][a[i]];
        }
        if(get_ni(a,length)%2==0)res+=ji;
        else res-=ji;

    }
    for(int i=now;i<length;i++)//a[now]与a[i]作交换
    {
        swap(a[now],a[i]);
        all_sort(a,now+1,length,metrix,res);
        swap(a[now],a[i]);
    }
}
int f(int (*metrix)[10],int x) //metrix代表二维数组
{
    //求行列式a(x行x列)值
    //算法是 sum{ (-1)^t a[0][p1]*a[1][p2]*a[2][p3]* ...... }
    //t是p1 p2 p3的逆序数
    int res=0;
    int* L=new int[x];
    iIN(0,x)
    {
        L[i]=i;
    }
    all_sort(L,0,x,metrix,res);
    delete []L;
    cout<<res<<endl;
}
int main()
{
    int a[4][10]={{3,1,1,1},{1,3,1,1},{1,1,3,1},{1,1,1,3}};
    f(a,4);
    return 0;
}

​

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会写代码的孙悟空

赠人玫瑰 手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值