SPFA Algorithm
[Cpp]
# Include <iostream>
# Include <cstdio>
# Include <cstring>
Using namespace std;
Int n, m, st, ed, front, rear;
Double mat [1005] [1005], dis [1005];
Int v [1, 1005], q [2, 1000001];
Void spfa ()
{
Int I, p;
While (front <rear)
{
P = q [front ++];
V [p] = 0;
For (I = 0; I <n; I ++)
{
If (mat [p] [I] = 0 | p = I)
Continue;
If (dis [p] * mat [p] [I]> dis [I])
{
Dis [I] = dis [p] * mat [p] [I];
If (! V [I])
{
Q [rear ++] = I;
V [I] = 1;
}
}
}
}
}
Int main ()
{
Int I, j;
While (scanf ("% d", & n )! = EOF)
{
For (I = 0; I <n; I ++)
For (j = 0; j <n; j ++)
Scanf ("% lf", & mat [I] [j]);
Scanf ("% d", & m );
While (m --)
{
Scanf ("% d", & st, & ed );
Memset (v, 0, sizeof (v ));
Memset (dis, 0, sizeof (dis ));
V [ST-1] = 1;
Dis [ST-1] = 1;
Front = 0;
Rear = 1;
Q [front] = ST-1;
Spfa ();
If (dis [ed-1]! = 0)
Printf ("%. 3lf \ n", dis [ed-1]);
Else
Printf ("What a pity! \ N ");
}
}
Return 0;
}
By Cambridgeacm