public int Between(IProgrammer programmerFrom, IProgrammer programmerTo) { if (programmerFrom.Equals(programmerTo)) { return(0); } var parents = BuildParentPointers(programmerFrom); return(ShortestPath(programmerFrom, programmerTo, parents)); }
private static int ShortestPath(IProgrammer programmerFrom, IProgrammer programmerTo, Dictionary <IProgrammer, IProgrammer> parents) { var degreesOfSeparation = 0; IProgrammer parentProgrammer = programmerTo; while (!programmerFrom.Equals(parentProgrammer)) { parentProgrammer = parents[parentProgrammer]; degreesOfSeparation++; } return(degreesOfSeparation); }