我正在尝试实现一个寻找连通图最短路径的dijkstra模型。 我所拥有的是一个图表,当按下按钮时,会在图表上随机生成节点。
我想做的是以下内容:
其他一些说明。
因为这些DataPoints是在这个图表控件中随机生成的,所以我实际上没有Vertex类来生成顶点。我一直在寻找并发现大多数路径查找功能都使用顶点类。所以基本上我的列表将从图表控件的节点填充。
任何人都可以提供任何有关如何解决上述两个问题的见解吗?
//TODO: Change to a function with return bool. Void for purposes of testing at the moment.
public void isConnected()
{
List<DataPoint> ParentPoints = new List<DataPoint>();
//Gather all the non data generator into the same point array
foreach (DataPoint pNonDG in chtGraph.Series[0].Points)
{
ParentPoints.Add(pNonDG);
}
}
答案 0 :(得分:0)
计算科学图与我们在统计学或数学中制作的“图表”图不同。计算机科学中的图形是通过一系列“边缘”连接的“节点”的集合
节点通过边缘连接,但这并不意味着它已连接回来。有些边可以是单向连接。
边缘通常具有与它们相关联的“重量”或“成本”。这就是你的dijkstra算法会派上用场的地方。它将使用此成本来计算到目标的最短路径。
让我们看一下我们可能采用的一些数据类型
class GraphNode {
List<GraphEdge> Edges = new List<GraphEdge>();
public void AddEdge(GraphEdge edge) {
Edges.Add(edge);
}
//you get the idea, this should have much more
//it also manages edge connections
}
class GraphEdge { //this is a one way connection
GraphNode ConnectedTo = null;
//GraphNode ConnectedFrom = null; //if you uncomment this, it can be a two-way
//connection, but you will need more code to
//manage it
float Cost = 0f;
//you might consider adding a destructor that clears the pointers
//otherwise gc might have a hard time getting rid of the nodes
}
class Graph {
List<GraphNodes> Nodes = new List<GraphNodes>();
//this class manages the nodes
//it also provides help for connecting nodes
}