利用dfs搜索求解行列式(string
型)
#include <iostream>
#include <cstring>
using namespace std;
string dect[20][20];
int n;
bool check[20];
int que[20];
void dfs(int num);
void inverse_number();
int main()
{
cout << "\a输入行列式的维数: ";
cin >> n;
for (int i = 1; i <= n; ++i)
{
cout << "\a输入行列式的第" << i << "行。\n";
for (int j = 1; j <= n; j++)
cin >> dect[i][j];
}
for (int i = 1; i <= n; i++)
check[i] = false;
cout << "——————————————————————————————————————————————\n";
cout << "Answer:\n";
dfs(1);
return 0;
}
void inverse_number()
{
int sum = 0;
for (int i = 1; i <= n; i++)
for (int j = i + 1; j <= n; j++)
if (que[i] > que[j])
sum++;
if (sum % 2 == 0)
cout << "+ ";
else cout << "- ";
}
void dfs(int num)
{
if (num == n + 1)
{
inverse_number();
for (int i = 1; i <= n - 1; i++)
cout << dect[i][que[i]] << " * ";
cout << dect[n][que[n]] << endl;
return;
}
for(int i = 1; i <= n; i++)
if (check[i] == false)
{
check[i] = true;
que[num] = i;
dfs(num + 1);
check[i] = false;
}
return;
}
利用dfs搜索求解行列式(整数型)
#include <iostream>
#include <cstring>
using namespace std;
int dect[20][20];
int n;
bool check[20];
int que[20];
int answer = 0;
void dfs(int num);
int inverse_number();
int main()
{
cout << "\a输入行列式的维数: ";
cin >> n;
for (int i = 1; i <= n; ++i)
{
cout << "\a输入行列式的第" << i << "行。\n";
for (int j = 1; j <= n; j++)
cin >> dect[i][j];
}
for (int i = 1; i <= n; i++)
check[i] = false;
cout << "——————————————————————————————————————————————\n";
dfs(1);
cout << "ANSWER: " << answer << endl;
return 0;
}
int inverse_number()
{
int sum = 0;
for (int i = 1; i <= n; i++)
for (int j = i + 1; j <= n; j++)
if (que[i] > que[j])
sum++;
if (sum % 2 == 0) return 1;
else return -1;
}
void dfs(int num)
{
if (num == n + 1)
{
int x = inverse_number();
for (int i = 1; i <= n; i++)
x *= dect[i][que[i]];
answer += x;
return;
}
for(int i = 1; i <= n; i++)
if (check[i] == false)
{
check[i] = true;
que[num] = i;
dfs(num + 1);
check[i] = false;
}
return;
}