题目
#include<bits/stdc++.h>
using namespace std;
int n,t,cnt,vis[262144];
double a[19][19],dp[262144];
queue<int>q;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
dp[(1<<n)-1]=1;
q.push((1<<n)-1);
while(q.size()){
t=q.front();
q.pop();
cnt=0;
for(int i=1,j=1;i<=n;i++,j<<=1){
if(t&j){
cnt++;
}
}
cnt=cnt*(cnt-1);
for(int i=1,j=1;i<=n;i++,j<<=1){
if(t&j){
for(int k=1,l=1;k<=n;k++,l<<=1){
if(t&l&&j!=l){
dp[t^j]+=dp[t]*a[k][i]/cnt;
dp[t^l]+=dp[t]*a[i][k]/cnt;
if(!vis[t^j]){
vis[t^j]=1;
q.push(t^j);
}
if(!vis[t^l]){
vis[t^l]=1;
q.push(t^l);
}
}
}
}
}
}
for(int i=1;i<=n;i++){
printf("%.6lf ",dp[1<<i-1]);
}
}