Pagini recente » Cod sursa (job #2998958) | Cod sursa (job #37059) | Cod sursa (job #31238) | Cod sursa (job #2915904) | Cod sursa (job #1675314)
#include <cstdio>
#define EPS 0.00000001
#define MAXN 255
int n;
double a[MAXN+1][MAXN+2], r[MAXN+1];
inline bool zero(double x){
if(x<0)return -EPS<x;
else return x<EPS;
}
inline void adauga(int x, int y, int z){
if(x<n){
a[x][y]--;
a[x][x]++;
a[x][n+1]+=z;
}
}
inline void gauss(){
int i, j, k, p, f;
double aux;
i=1;
j=1;
while((i<=n)&&(j<=n)){
k=i;
while((k<=n)&&(zero(a[k][j]))){
k++;
}
if(k<=n){
if(i!=k){
for(p=1; p<=n+1; p++){
aux=a[i][p];
a[i][p]=a[k][p];
a[k][p]=aux;
}
}
for(p=j+1; p<=n+1; p++){
a[i][p]/=a[i][j];
}
a[i][j]=1;
for(k=i+1; k<=n; k++){
if(!zero(a[k][j])){
for(p=j+1; p<=n+1; p++){
a[k][p]-=a[k][j]*a[i][p];
}
a[k][j]=0;
}
}
i++;
j++;
}else{
j++;
}
}
for(i=n; i>0; i--){
j=1;
f=1;
while((j<=n)&&(f)){
if(!zero(a[i][j])){
f=0;
r[j]=a[i][n+1];
for(p=j+1; p<=n; p++){
r[j]-=r[p]*a[i][p];
}
}else{
j++;
}
}
}
}
int main(){
int m, x, y, z, i;
FILE *fin, *fout;
fin=fopen("tunel.in", "r");
fout=fopen("tunel.out", "w");
fscanf(fin, "%d%d", &n, &m);
for(i=0; i<m; i++){
fscanf(fin, "%d%d%d", &x, &y, &z);
adauga(x, y, z);
adauga(y, x, z);
}
a[n][n]=1;
a[n][n+1]=0;
gauss();
fprintf(fout, "%.8lf\n", r[1]);
fclose(fin);
fclose(fout);
return 0;
}