Floyd-Warshall Algorithm:
public
void
FloydWarshall(int[,]
adjacencyMatrix)
{
int[,] predecessor = adjacencyMatrix.Clone();
for (int iShortcutNode = 1; iShortcutNode <= countOfVertices; iShortcutNode++)
{
for (int iSrc = 1; iSrc <= countOfVertices; iSrc++)
{
if (iSrc == iShortcutNode || distances[iSrc, iShortcutNode] == INFINITE)
continue;
for (int iDest = 1; iDest <= countOfVertices; iDest++)
{
// could do if(iDest == iSrc) continue;, but we don't need to
if (distances[iSrc, iShortcutNode] + distances[iShortcutNode, iDest]
<
distances[iSrc, iDest])
{
distances[iSrc, iDest] = distances[iSrc, iShortcutNode] + distances[iShortcutNode, iDest];
predecessor[iSrc, iDest] = iShortcutNode;
}
}
}
}
}