Код: Выделить всё
#include <iostream>
using namespace std;
const int n(5);
int x[n];
int a[][n]{{ 3,-2, 5, 7,1},
{ 2, 8,10,-3,6},
{ 1, 8, 7, 2,1},
{-6,-2, 3, 5,6},
{-1, 3, 5, 5,7}};
// функция для обмена значений между парой переменных
inline void swap(int& a,int& b)
{
int c(a);
a = b;
b = c;
}
// функция для генерации очередной перестановки по предыдущей (из чисел 0,1,2,...,n-1)
bool hasNextPermutation()
{
static int callNum(1);
int i(n-2);
int j(0);
while((i>=0) && (x[i] >= x[i+1])) --i;
if(i>=0)
{
j = i+1;
while ((j<(n-1)) && (x[j+1]>x[i])) ++j;
swap(x[i],x[j]);
for(j = i+1; j < (n+i+1)/2;
swap(x[j],x[n-j+i]),++j);
callNum++;
return true;
}
return false;
}
int main( int argc,char *argv[])
{
int i(0) ;
int j(0);
int det(0);
int invCount(0);
int addend(0);
for (int i = 0; i < n; ++i)
x[i]= i;
do{
for (int i = 0; i < n; i++ )
{
for (int j = 0; j < n; ++j)
{
if (x[i-1] > x[i])
{
invCount++;
}
for (int i = 0; i < n; i++ )
{
if (invCount % 2 == 0) { addend == a[i][x[i]];}
else addend == (-1)*a[i][x[i]] ;
}
det += addend;
}
}
}
while (hasNextPermutation());
printf("\n\nDeterminant equals= %d\n",det);
return 0;
}