w : edge weights
d : distance matrix
p : predecessor matrix
w[i][j] = length of direct edge between i and j
d[i][j] = length of shortest path between i and j
p[i][j] = on a shortest path from i to j, p[i][j] is
the last node before j, i.e. i -> ... -> p[i][j] -> j
for (i=0; i<n; i++) {
for (j=0; j<n; j++) {
d[i][j] = w[i][j];
p[i][j] = i;
}
}
for (i=0; i<n; i++) {
d[i][i] = 0;
}
for (k=0; k<n; k++)
for (i=0; i<n; i++)
for (j=0; j<n; j++)
if (d[i][k] + d[k][j] < d[i][j]) {
d[i][j] = d[i][k] + d[k][j];
p[i][j] = p[k][j];
}
}
}
}
print_path (int i, int j) {
if (i!=j) {
print_path(i,pred[i][j]);
}
print(j);
}
w : adjacency matrix
d : transitive hull
w[i][j] = edge between i and j (0=no edge, 1=edge)
d[i][j] = 1 if and only if j is reachable from i
for (i=0; i<n; i++) {
for (j=0; j<n; j++) {
d[i][j] = w[i][j];
}
}
for (i=0; i<n; i++) {
d[i][i] = 1;
}
for (k=0; k<n; k++)
for (i=0; i<n; i++)
for (j=0; j<n; j++)
d[i][j] = d[i][j] || (d[i][k] && d[k][j]);
}
}
}
w : edge weights
d : minimax distance matrix
p : predecessor matrix
w[i][j] = length of direct edge between i and j
d[i][j] = length of minimax path between i and j
for (i=0; i<n; i++) {
for (j=0; j<n; j++) {
d[i][j] = w[i][j];
}
}
for (i=0; i<n; i++) {
d[i][i] = 0;
}
for (k=0; k<n; k++) {
for (i=0; i<n; i++) {
for (j=0; j<n; j++) {
d[i][j] = min(d[i][j], max(d[i][k], d[k][j]));
}
}
}
w : edge weights
d : maximin distance matrix
p : predecessor matrix
w[i][j] = length of direct edge between i and j
d[i][j] = length of maximin path between i and j
for (i=0; i<n; i++) {
for (j=0; j<n; j++) {
d[i][j] = w[i][j];
}
}
for (i=0; i<n; i++) {
d[i][i] = 0;
}
for (k=0; k<n; k++) {
for (i=0; i<n; i++) {
for (j=0; j<n; j++) {
d[i][j] = max(d[i][j], min(d[i][k], d[k][j]));
}
}
}
w : edge weights
p : probability matrix
w[i][j] = survival probability of edge between i and j
p[i][j] = survival probability of safest path between i and j
for (i=0; i<n; i++) {
for (j=0; j<n; j++) {
p[i][j] = w[i][j];
}
}
for (i=0; i<n; i++) {
p[i][i] = 1;
}
for (k=0; k<n; k++) {
for (i=0; i<n; i++) {
for (j=0; j<n; j++) {
p[i][j] = max(p[i][j], p[i][k] * p[k][j]);
}
}
}
Last modified 2001-02-15
| mdettinger@arsdigita.com |