将dijkstra的算法实现到windows窗体图控件中

时间:2012-10-08 00:21:41

标签: c# algorithm windows-forms-designer

我正在尝试实现一个寻找连通图最短路径的dijkstra模型。 我所拥有的是一个图表,当按下按钮时,会在图表上随机生成节点。

我想做的是以下内容:

  1. 确定图表是否已连接
  2. 如果连接,则决定找到最短路径的三种不同方式中的一种: 一个。开始和结束节点之间距离的最短路径 湾边数最短的路径 C。边缘总重量的最短路径(这里,我们想要的重量减去......)
  3. 其他一些说明。

    因为这些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);
            }
        }
    

1 个答案:

答案 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
}