Floyd-Warshall Algorithm:

 

 

public void FloydWarshall(int[,] adjacencyMatrix)

{

    int[,] distances = adjacencyMatrix.Clone();

    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;

                }

            }

        }

    }

}