0

我想尝试从已知点选择路线,如下所示。但我无法获得合适的路线链,例如点 2 到 8。根据这个试验将选择 route1-route2 和 route3,但实际上必须只有 route1 和 route3,另一个示例点 1 到点 11,我的试验将给出所有路线的结果。我怎样才能消除不必要的路线。这次试验可以做到这一点还是我应该改变我的观点?

static void Main(string[] args)
{
    var route1 = new List<int> { 1, 2, 3, 4 };
    var route2 = new List<int> { 1, 5, 6, 7 };
    var route3 = new List<int> { 1, 8, 9, 10 };
    var route4 = new List<int> { 10, 11, 12, 13 };

    List<List<int>> routeList = new List<List<int>>();
    routeList.Add(route1);
    routeList.Add(route2);
    routeList.Add(route3);
    routeList.Add(route4);

    int start = 3;
    int end = 9;

    var vistedRoutes = new List<List<int>>();

    foreach(var route in routeList.FindAll(r => r.Contains(start)))
    {
        vistedRoutes.Add(route);
        routeList.Remove(route);
        FindPath(vistedRoutes, routeList, start, end);

        if (vistedRoutes.Last().Contains(end))
        {
            break;
        }
    }

    Console.WriteLine("done");
}

static void FindPath(List<List<int>> visitedRoutes, List<List<int>> remainingRoutes, int start, int end)
{
    if (visitedRoutes.Last().Contains(end))
    {
        return;
    }
    for (int i = 0; i < remainingRoutes.Count; i++ )
    {
        var route = remainingRoutes[i];

        foreach (var point in route)
        {
            if (visitedRoutes.Last().Contains(point))
            {
                visitedRoutes.Add(route);
                var newRemainingRoutes = new List<List<int>>(remainingRoutes);
                newRemainingRoutes.Remove(route);
                FindPath(visitedRoutes, newRemainingRoutes, start, end);
                if (visitedRoutes.Last().Contains(end))
                {
                    return;
                }
                else
                {
                    visitedRoutes.Remove(route);
                }
            }
        }
    }
}
4

0 回答 0