/// <summary> /// Задает уровень станции в графе /// </summary> /// <param name="container"></param> /// <param name="currentStation"></param> /// <param name="currentLevel"></param> /// <returns></returns> private int SetStationLevel(ITempStationsContainer container, IStation currentStation, int currentLevel) { foreach (IStation station in currentStation.GetConnectedStations()) { if (container.GetLevelOfStation(station) != -1) { return(container.GetLevelOfStation(station) + 1); } } return(currentLevel++); }
/// <summary> /// Возвращает кратчайший путь /// </summary> /// <param name="container"></param> /// <param name="stationFrom"></param> /// <param name="stationTo"></param> /// <param name="currentLevel"></param> /// <returns></returns> private List <IStation> FormPath(ITempStationsContainer container, IStation stationFrom, IStation stationTo, int currentLevel) { int level = currentLevel; List <IStation> path = new List <IStation>(); List <IStation> tempStationsList = new List <IStation>(); IStation stationTemp = stationTo; bool IsStationFound = false; path.Add(stationTo); while (level > 0) { IsStationFound = false; tempStationsList = container.GetStationsFromLevel(level); foreach (IStation station in tempStationsList) { if (IsStationFound) { break; } foreach (IStation stat in stationTemp.GetConnectedStations()) { if (station.GetStationID() == stat.GetStationID()) { stationTemp = stat; IsStationFound = true; } } } path.Add(stationTemp); level--; } path.Add(stationFrom); path.Reverse(); return(path); }