Pagini recente » Cod sursa (job #2097280) | Cod sursa (job #52627) | Cod sursa (job #3213188) | Cod sursa (job #36683) | Cod sursa (job #890567)
Cod sursa(job #890567)
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstdlib>
#include <math.h>
using namespace std;
#define REP(i,n) for(int i = 0;i<(int)n;++i)
#define pii pair<int,int>
#define x first
#define y second
#define mp make_pair
#define eps 1e-6
ifstream cin("gauss.in");
ofstream cout("gauss.out");
const int nmax = 256;
vector< pii > G[nmax];
double X[nmax][nmax], S[nmax];
int N, M;
void readData() {
cin>>N>>M;
for(int i = 0;i < M;i++) {
int a, b, c;
cin>>a>>b>>c;
G[a].push_back(mp(b,c));
G[b].push_back(mp(a,c));
}
}
void gauss() {
int i = 1,j = 1, k;
while(i <= N && j <= N) {
for(k = i;k <= N;k++) {
if(fabs(X[k][j]) > eps) {
break;
}
}
if(k == N + 1) {
j++;
continue;
}
if(i != k) {
for(int w = 1;w <= N + 1;w++) {
swap(X[i][w],X[k][w]);
}
}
for (int a = 1; a <= N; ++a) if (a != j) {
double r = -X[a][j]/X[j][j];
for (int k = 1; k <= N; ++k)
X[a][k] += r * X[j][k];
X[a][N + 1] += r * X[j][N + 1];
}
++i; ++j;
}
}
void solve() {
X[N][N] = 1.0;
X[N][N + 1] = 0.0;
for(int i = 1;i < N;i++) {
double a = 1.0/G[i].size();
X[i][i] = 1.0;
for(vector< pii >::const_iterator w = G[i].begin();w != G[i].end();w++) {
X[i][w->x] -= a;
X[i][N + 1] += w->y*a;
}
}
gauss();
cout.precision(6);
cout<<fixed<<X[1][N + 1];
}
int main()
{
readData();
solve();
cout<<0;
return 0;
}