public object Clone()
 {
     AdjacencyMatrix newMatrix = new AdjacencyMatrix(this.NodeCount);
     for (int i = 0; i < this.matrix.Length; i++)
     {
         for (int j = 0; j < this.matrix[i].Length; j++)
         {
             if (this.matrix[i][j].HasValue) { newMatrix.AddEdge(i, j, this.matrix[i][j].Value); }
         }
     }
     return newMatrix;
 }
 public void AlgoritmStep()
 {
     for (int k = 0; k < previousMatrix.NodeCount; k++)
     {
         for (int i = 0; i < previousMatrix.NodeCount; i++)
         {
             for (int j = 0; j < previousMatrix.NodeCount; j++)
             {
                 if ((previousMatrix.GetElement(i,k).HasValue)&&(previousMatrix.GetElement(k,j).HasValue))
                 {
                     int prev = previousMatrix.GetElement(i,j) ?? Int32.MaxValue;
                     int next = previousMatrix.GetElement(i,k).Value + previousMatrix.GetElement(k,j).Value;
                     nextMatrix.SetElement(i,j, prev <= next ? prev : next);
                 }
             }
         }
         previousMatrix = (AdjacencyMatrix)nextMatrix.Clone();
     }
 }
 public FlWaAlgoritm(AdjacencyMatrix inputMatrix)
 {
     previousMatrix = (AdjacencyMatrix)inputMatrix.Clone();
     nextMatrix = (AdjacencyMatrix)inputMatrix.Clone();
 }