#include "The-Tips.h" double TheTips::solve(vector Cl, vector probability, int print) { int i, j, v; vector < vector > C; vector p; double x; C.resize(Cl.size()); /* Change the Y/N's to 1/0's */ for (i = 0; i < C.size(); i++) { C[i].resize(Cl[i].size()); for (j = 0; j < C.size(); j++) { C[i][j] = (Cl[i][j] == 'Y') ? 1 : 0; } C[i][i] = 1; } /* Print the adjacency matrix before doing Floyd-Warshall */ if (print) { printf("The Adjacency Matrix:\n\n"); printf(" "); for (i = 0; i < C.size(); i++) printf("%X", i&0xf); printf("\n"); printf(" -"); for (i = 0; i < C.size(); i++) printf("-"); printf("\n"); for (i = 0; i < C.size(); i++) { printf("%X | ", i&0xf); for (j = 0; j < C[i].size(); j++) printf("%d", C[i][j]); printf("\n"); } printf("\n"); } for (v = 0; v < C.size(); v++) { for (i = 0; i < C.size(); i++) { if (C[i][v]) { for (j = 0; j < C.size(); j++) { C[i][j] |= C[v][j]; } } } } if (print) { printf("Probabilities:\n\n"); for (i = 0; i < probability.size(); i++) printf("%4d", probability[i]); printf("\n\n"); printf("The Floyd-Warshall Matrix:\n\n"); printf(" "); for (i = 0; i < C.size(); i++) printf("%X", i&0xf); printf("\n"); printf(" -"); for (i = 0; i < C.size(); i++) printf("-"); printf("\n"); for (i = 0; i < C.size(); i++) { printf("%X | ", i&0xf); for (j = 0; j < C[i].size(); j++) printf("%d", C[i][j]); printf("\n"); } printf("\n"); } /* Calculate the values of p from the probabilities and reachability: */ p.resize(C.size(), 0); for (i = 0; i < C.size(); i++) { x = probability[i]; x /= 100.0; for (j = 0; j < C.size(); j++) { if (C[i][j]) p[j] += ((1 - p[j]) * x); } } if (print) { printf("\nThe Expected Values\n\n"); for (i = 0; i < C.size(); i++) { printf("I: %X Prob: %7.5lf\n", i, p[i]); } printf("\n"); } /* Calculate the final return value */ x = 0; for (i = 0; i < C.size(); i++) x += p[i]; return x; }