⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cdet.cpp

📁 求行列式的代码
💻 CPP
字号:
#include "CDet.h"
#include "iostream.h"

//constructor
//intialize Mat
CDet::CDet(int dim)
{
	int RowCnt,ColCnt;
	Dim=dim;
	Mat=new int*[Dim];
	for(RowCnt=0;RowCnt<Dim;RowCnt++)
	{
		Mat[RowCnt]=new int[Dim];
		for(ColCnt=0;ColCnt<Dim;ColCnt++)
			cin>>Mat[RowCnt][ColCnt];
		cout<<endl;
	}
}

//destructor
CDet::~CDet()
{
	int Cnt;
	for(Cnt=0;Cnt<Dim;Cnt++)
		delete []Mat[Cnt];
	delete []Mat;
}

//function Det():return determinant of Mat
//recursive algorithm used
int CDet::Determinant(int **mat,int dim)
{
	int Det=0;
	//if dimension is 1,return the single element
	if(dim==1)
		Det=mat[dim-1][dim-1];
	else if(dim>=2)
	{
		int Cnt1,Cnt2;
		for(Cnt1=0;Cnt1<dim;Cnt1++)
		{
			int **dedim;
			dedim=DeDim(mat,dim,0,Cnt1);
			if(Cnt1%2==0)
				Det+=mat[0][Cnt1]*Determinant(dedim,dim-1);
			else
				Det-=mat[0][Cnt1]*Determinant(dedim,dim-1);
			//free **dedim
			for(Cnt2=0;Cnt2<dim-1;Cnt2++)
				delete []dedim[Cnt2];
			delete []dedim;
		}
	}
	return Det;
}

//function reduce dimension of a matrix
int **CDet::DeDim(int **mat,int dim,int i,int j)
{
	int **temp;//to be returned 
	//intialize **temp
	temp=new int*[dim-1];
	int RowCnt,ColCnt;
	for(RowCnt=0;RowCnt<dim-1;RowCnt++)
		temp[RowCnt]=new int[dim-1];
	for(RowCnt=0;RowCnt<i;RowCnt++)
	{
		for(ColCnt=0;ColCnt<j;ColCnt++)
			temp[RowCnt][ColCnt]=mat[RowCnt][ColCnt];
        for(ColCnt=j;ColCnt<dim-1;ColCnt++)
			temp[RowCnt][ColCnt]=mat[RowCnt][ColCnt+1];
	}
	for(RowCnt=i;RowCnt<dim-1;RowCnt++)
	{
		for(ColCnt=0;ColCnt<j;ColCnt++)
			temp[RowCnt][ColCnt]=mat[RowCnt+1][ColCnt];
        for(ColCnt=j;ColCnt<dim-1;ColCnt++)
			temp[RowCnt][ColCnt]=mat[RowCnt+1][ColCnt+1];
	}
	return temp;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -