行列式计算

#include<stdio.h>
#include<string.h>
int result;
int* data;
int* used;
int* location;
void f(int hang,int lie,int** arr){

	if(hang>lie){
		int tempS=1;
		for(int i=0;i<=lie;i++)
			tempS*=data[i];

		int reserveCount=0;
		for(int j=0;j<=lie;j++)
			for(int k=j+1;k<=lie;k++)
				if(location[j]>location[k])
					reserveCount++;

		if(reserveCount%2!=0)
			tempS=-tempS;
		result+=tempS;
		return;
	}


	for(int ii=0;ii<=lie;ii++){
		if(used[ii]==0){
			used[ii]=1;
			location[hang]=ii;
			data[hang]=arr[hang][ii];
			f(hang+1,lie,arr);
			used[ii]=0;
		}
	}
}
int main(){


	int hang;
 
	while(true){
		result=0;
		printf("输入行数\n");
		scanf("%d",&hang);

		int** arr=new int*[hang];

		int i;
		for(i=0;i<hang;i++){
			arr[i]=new int[hang];
		}

		data=new int[hang];

		used=new int[hang];


		location=new int[hang];
 
		for(i=0;i<hang;i++)
			used[i]=0;
		printf("依次输入各数\n");
		for(i=0;i<hang;i++)
			for(int j=0;j<hang;j++)
				scanf("%d",&arr[i][j]);

		f(0,hang-1,arr);

		printf("\nvalue= %d\n\n",result);

		delete[]data;
		delete[]used;
		delete[]location;
		for(i=0;i<hang;i++){
			delete[]arr[i];
		}
	
	}
}

/*

  5
1 2 3 4 5
0 2 3 4 5
0 0 3 4 5
0 0 0 4 5
0 0 0 0 5



*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值