线性代数矩阵计算
程序员文章站
2022-07-12 14:11:14
...
无脑bfs搞全排列
#include<iostream>
using namespace std;
int n;
int box[20];
int vis[20];
int s[20][20];
int res;
int check()
{
int cnt=0;
for(int i=1;i<n;i++)
for(int j=0;j<i;j++)
if(box[i]<box[j])
cnt++;
return cnt;
}
void bfs(int step)
{
if(step==n)
{
int flag= check()&1? -1:1;
int temp=1;
for(int i=0;i<n;i++)
temp*=s[i][box[i]];
res+=temp*flag;
return ;
}
for(int i=0;i<n;i++)
if(vis[i]==0)
{
vis[i]=1;
box[step]=i;
bfs(step+1);
vis[i]=0;
}
return ;
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
scanf("%d",&s[i][j]);
bfs(0);
cout<<res<<endl;
}
/*
4
4 1 2 4
1 2 0 2
10 5 2 0
0 1 1 7
*/
上一篇: Problem D: 解方程组
下一篇: 线性代数(4)——矩阵进阶