Pagini recente » Cod sursa (job #2571514) | Cod sursa (job #672230) | Cod sursa (job #549040) | Cod sursa (job #1825543) | Cod sursa (job #1174546)
#include<stdio.h>
#include<algorithm>
#include<vector>
const int N=257; const double E=1e-9;
using namespace std;
FILE *f,*g;
vector< pair <int,double> > graph[N]; int n; int deg[N];
double a[N][N], sol;
void read(void){
f=fopen("tunel.in","r");
g=fopen("tunel.out","w");
int m;
fscanf(f,"%d%d",&n,&m);
int i; int v1,v2; double c;
for(i=1;i<=m;i++){
fscanf(f,"%d%d%lf",&v1,&v2,&c);
graph[v1].push_back(make_pair(v2,c));
graph[v2].push_back(make_pair(v1,c));
deg[v1]++; deg[v2]++;
}
}
void makearray(void){
int i;double sum;
vector<pair<int,double> >::iterator it;
for(i=1;i<=n-1;i++){
it=graph[i].begin();
sum=0;
while(it != graph[i].end()){
if (it->first != n) a[i][it->first]-=1;
sum+=it->second;
++it;
}
a[i][i]=deg[i];
a[i][n]=sum;
}
}
void gauss(void){
int i,j,k; double aux;
for(i=1;i<=n-1;i++){
if (a[i][i] < E && a[i][i] > -E){
for(j=i+1;j<=n-1;j++){
if (a[j][i]>E || a[j][i]<-E){
for(k=1;k<=n;k++) swap(a[i][k],a[j][k]);
break;
}
}
}
for(j=1;j<=n-1;j++){
if (j!=i){
aux=a[j][i]/a[i][i];
for(k=1;k<=n;k++)
a[j][k]-=aux*a[i][k];
}
}
}
sol=a[1][n]/a[1][1];;
}
int main(void){
read();
makearray();
gauss();
fprintf(g,"%.9lf",sol);
return 0;
}