Алгоритм, который будет захватывать все узлы, прикрепленные к конкретному узлу - PullRequest
0 голосов
/ 19 апреля 2010

Я создаю алгоритм, основанный на ориентированных графах. Я хотел бы функцию, которая будет захватывать все узлы, которые прикреплены к конкретному узлу.

public List<Node> GetNodesInRange(Graph graph, int Range, Node selected)
{
    var result = new List<Node>();
    result.Add(selected);
    if (Range > 0)
    {
        foreach (Node neighbour in GetNeighbours(graph, selected))
        {
            result.AddRange(GetNodesInRange(graph, Range - 1, neighbour));
        }
    }
    return result;
}

private List<Node> GetNeighbours(Graph graph, Node selected)
{
    foreach(Node node in graph.node)
    {
        if (node == selected)
        {
            GetNodesInRange(node, Range-1, /*don't know what 2 do here*/);
            //and confused all the way down

Ответы [ 2 ]

2 голосов
/ 19 апреля 2010

Это зависит от того, какую реализацию вы используете для своего графика:

  • список ребер : вы ищете все ребра, у которых указанная вершина является первым или вторым параметром ребра
  • список смежностей : список, прикрепленный к узлу, уже является списком инцидентных ему узлов
  • матрица смежности : вы берете столбец (или строку) выбранной вами вершины
0 голосов
/ 19 апреля 2010

Вы звоните GetNodesInRange внутри GetNeighbours и GetNeighbours внутри GetNodesInRange, и это создает проблему.

Посмотрите на ответ Джек .

И если вы напишите, как выглядят ваши Graph, Node и Edge, мы сможем предложить дополнительную помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...