mollnn

#include <bits/stdc++.h>
#define eps 1e-6
using namespace std;

const int N = 55;

namespace mat {
double a[N][N];
int n,p=1;

double gauss_jordan() {
    double ans = 1;
	for(int i=1;i<=n;i++) {
		int r=i;
		for(int j=i+1;j<=n;j++) if(fabs(a[j][i])>fabs(a[r][i])) r=j;
		if(r-i) {for(int j=1;j<=n+1;j++) swap(a[i][j],a[r][j]); ans*=-1;}
		//if(fabs(a[i][i])<eps) {p=0; return;}
		for(int j=1;j<=n;j++) if(j-i) {
			double tmp=a[j][i]/a[i][i];
			for(int k=i+1;k<=n+1;k++) a[j][k]-=a[i][k]*tmp;
		}
		ans*=a[i][i];
	}
	return ans;
}
} // namespace mat

double n,p[N][N];

int main() {
    cin>>n;
    for(int i=1;i<=n;i++) {
        for(int j=1;j<=n;j++) {
            cin>>p[i][j];
            if(abs(1-p[i][j])<eps) p[i][j]-=eps;
        }
    }
    double ans=1;
    for(int i=1;i<=n;i++) {
        for(int j=i+1;j<=n;j++) {
            ans*=1-p[i][j];
        }
    }
    for(int i=1;i<=n;i++) {
        for(int j=1;j<=n;j++) if(i!=j) {
            mat::a[i][j]=-p[i][j]/(1-p[i][j]);
            mat::a[i][i]+=p[i][j]/(1-p[i][j]);
        }
    }
    mat::n=n-1;
    ans*=mat::gauss_jordan();
    printf("%.8lf\n",ans);
}

分类:

技术点:

相关文章:

  • 2021-12-06
  • 2022-12-23
  • 2021-11-17
  • 2022-01-01
  • 2021-06-13
  • 2021-10-16
  • 2021-12-22
  • 2022-12-23
猜你喜欢
  • 2021-12-22
  • 2021-10-27
  • 2021-12-28
  • 2021-10-07
  • 2022-02-16
  • 2021-06-16
  • 2021-12-06
相关资源
相似解决方案