原来矩阵树定理对于边是概率的情况也是适用的qwqwq。
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int n;
double w[55][55], uu;
const double eps=1e-7;
void gauss(){
for(int i=1; i<=n; i++){
int maxi=i;
for(int j=i+1; j<=n; j++)
if(fabs(w[j][i])>fabs(w[maxi][i]))
maxi = j;
swap(w[maxi], w[i]);
for(int j=i+1; j<=n; j++){
double blv=w[j][i]/w[i][i];
for(int k=i; k<=n; k++)
w[j][k] -= blv * w[i][k];
}
}
}
int main(){
cin>>n;
double tmp=1.0;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++){
scanf("%lf", &uu);
if(i!=j){
if(uu>=1-eps) uu = 1 - eps;
if(uu<eps) uu = eps;
if(i<j) tmp *= 1 - uu;
w[i][j] = uu / (1 - uu);
}
}
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
if(i!=j){
w[i][i] += w[i][j];
w[i][j] *= -1;
}
n--;
gauss();
for(int i=1; i<=n; i++)
tmp *= w[i][i];
if(tmp<0) tmp *= -1;
printf("%.12f\n", tmp);
return 0;
}
原文地址:https://www.cnblogs.com/poorpool/p/9098695.html
时间: 2024-10-09 22:45:50