1

我目前正在开展一个项目,该项目需要我从伦敦地下的给定车站找到多条路线。我的项目是创建路线。我创建了一个使用 DFS 和递归的方法。该方法接受起始站的名称、一个空列表和一个整数值。当我使用以下代码执行该方法时:

GetRoutes("HOLBORN", list, 4);

我在列表中得到以下结果

HOLBORN
CHANCERY LANE
ST PAULS
BANK
LIVERPOOL STREET
TOTTENHAM COURT ROAD
OXFORD CIRCUS
RUSSELL SQUARE
KINGS CROSS
COVENT GARDEN

列表中的第一个字符串显示有效路径:

HOLBORN => CHANCERY LANE => ST PAULS => BANK => LIVERPOOL STREET

但是,然后我需要它再次搜索替代路线,例如:

HOLBORN => CHANCERY LANE => ST PAULS => BANK => LONDON BRIDGE

这是有问题的方法:

    public List<string> GetRoutes(string stationName, List<string> completeRoutes, int counter)
    {
        Stack<Node<TrainData>> s = new Stack<Node<TrainData>>();

        s.Push(GetRootStationNode(stationName));

        while (s.Count > 0)
        {
            var currentNode = s.Pop();
            if(!VisitedStation(currentNode.State.StationName, completeRoutes))
            {
                completeRoutes.Add(currentNode.State.StationName);
            }

            var allPossibleStation = GetAllPossibleNextStations(currentNode.State.StationName);

            foreach (var node in allPossibleStation)
            {
                if (counter > 0)
                {
                    if (!node.Visited)
                    {
                        node.Visited = true;
                        s.Push(node);
                        counter--;
                        GetRoutes(node.State.StationName, completeRoutes, counter);
                    }
                }
            }
        }

        return completeRoutes;
    }

这是检索特定站的所有子节点的 GetAllPossibleNextStations:

  public List<Node<TrainData>> GetAllPossibleNextStations(string input)
    {
        var possibleStations = new List<TrainData>();
        var NodeList = new List<Node<TrainData>>();

        var stationsMatchingInput = from f in dbList
                                    where f.StationName == input
                                    select f;

        foreach (var station in stationsMatchingInput)
        {
            var node = GetNextStation(station.PositionId);
            if (node != null && (node.State.Line == station.Line))
            {
                NodeList.Add(node);
            }
        }

我似乎无法理解这个遍历业务,所以任何建议都会很棒。

4

0 回答 0