log98 Ответов: 1

Как создать список соседей для каждого узла в C#?


Я пишу алгоритм Дейкстры,я хочу создать список соседей для каждого узла, я пишу немного кода, но мой код не создает список соседей для каждого узла. мой код имеет проблему, которая не различает соседей для каждого узла, и именно поэтому сохраняет полный список соседей для каждого узла.

Изображение[^]

например: Node[id] ==> (сосед, вес)
Node[0] ==> (1,123)
Node[0] ==> (2,113)
Node[0] ==> (3,214)
Node[0] ==> (4,203)

Node[1] ==> (2,175)
Node[1] ==> (4,214)


 public class Graph
{
    public Dictionary<int, List<KeyValuePair<int, int>>> vertices = new Dictionary<int, List<KeyValuePair<int, int>>>();

    public void AddVertex(int id, List<KeyValuePair<int, int>> edges)
    {
        vertices[id] = edges;
    }
}

    private Graph g = new Graph();

    public int Id { get; set; }
    private List<KeyValuePair<int, int>> dic = new List<KeyValuePair<int, int>>();

    private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
    {
        if (e.Button != MouseButtons.Right)
        {
            var result = circleManager.HitTest(e.Location);
            if (result != -1)
            {
                circlesSourceAndDestination.Add(circleManager.Circles[result]);

                if (Count == 1)
                {
                    Id = result;
                }
                else if (Count == 2)
                {
                    var weigth = CalculateLengthSourceAndDestination(circlesSourceAndDestination);
                    circlesSourceAndDestination.Clear();
                    if (weigth < 0)
                    {
                        weigth *= -1;
                    }

                    dic.Add(new KeyValuePair<int, int>(result, weigth));
                    g.AddVertex(Id, dic);
                    //neighborList.Add(new KeyValuePair<int, int>(result, weigth));
                    //newNode.Neighbors = neighborList;

                    //graph.Add(newNode);

                    Count = 0;
                }
                Count++;
            }
        }
        else
        {
            var result = circleManager.HitTest(e.Location);
            if (result != -1)
            {
                circleManager.Circles[circleManager.HitTest(e.Location)].Selected = true;
                circleManager.Circles[result].SelectFillColor = Color.Red;
            }
        }
        pictureBox1.Invalidate();
    }


Что я уже пробовал:

я хочу создать список соседей для каждого узла

Patrice T

Где в этом коде вы ищете соседей?
Откуда вы знаете, что узел а является соседом другого ?

Philippe Mori

Непонятно, какая у вас проблема? Расскажите нам, что вы получаете и чего ожидаете.

Philippe Mori

Если вы не можете правильно объяснить, что не работает с вашим кодом, вам трудно помочь, потому что мы должны попытаться понять частичный код, не имея представления о том, что он делает в настоящее время. Было бы лучше для вас использовать отладчик и найти проблему самостоятельно, если вы не в состоянии предоставить нам всю необходимую информацию, чтобы мы могли вам помочь.

1 Ответов

Рейтинг:
8

Maciej Los

Что ж...

Я бы посоветовал прочитать эту статью MSDN: Часть 5: от деревьев к графам[^], что может помочь вам понять, как создать граф из дерева. Попробуй!