Pagini recente » Cod sursa (job #2670586) | Cod sursa (job #333128) | Cod sursa (job #289290) | Cod sursa (job #79618) | Cod sursa (job #181116)
Cod sursa(job #181116)
#include <stdio.h>
#include <math.h>
#define maxn 256
#define db double
#define eps 0.0000001
int n,m;
db a[maxn][maxn];
int b[maxn][maxn];
int v[maxn], g[maxn];
int main()
{
freopen("tunel.in", "r", stdin);
freopen("tunel.out", "w", stdout);
scanf("%d %d ",&n,&m);
int i, j, k;
int x, y, z;
db aux;
for (i=1; i<=m; i++)
{
scanf("%d %d %d ",&x, &y, &z);
v[x] += z, v[y] += z;
b[x][y]++, b[y][x]++;
g[x]++, g[y]++;
}
for (i=1; i<=n; i++)
if (g[i])
{
for (j=1; j<=n; j++) a[i][j] = 1.0*b[i][j] / g[i];
a[i][i] -= 1;
a[i][n] = 1.0*v[i]/g[i];
a[i][n] *= -1;
}
// Gauss
for (i=1; i<n; i++)
{
if (fabs(a[i][i])<eps)
for (j=i+1; j<n; j++)
if (fabs(a[j][i])>eps)
for (k=1; k<=n; k++) aux = a[i][k], a[i][k] = a[j][k], a[j][k] = aux;
aux = 1/a[i][i];
for (j=1; j<=n; j++) a[i][j] *= aux;
for (j=1; j<n; j++)
if (i != j)
{
aux = a[j][i];
for (k=i; k<=n; k++) a[j][k] = a[j][k]*a[i][i] - aux*a[i][k];
}
}
printf("%lf\n", 1.0*a[1][n]/a[1][1]);
return 0;
}