【发布时间】:2017-01-08 07:06:21
【问题描述】:
我正在编写 dijkstra 算法,我想为每个节点创建邻居列表我正在编写一些代码,但我的代码没有为每个节点创建邻居列表。 它有一个问题,即每个节点的邻居都不同,这就是为什么要为每个节点保留完整的邻居列表。
例如: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();
}
【问题讨论】:
-
您能否再详细说明一下出了什么问题。您的代码很好并且相对可读,但很难理解实际出了什么问题。
标签: c# winforms list dictionary