/// <summary> /// Tìm cây khung có trọng số nhỏ nhất /// </summary> /// <returns></returns> public MyListGraph PrimAlgo(MyGraphNode startNode) { MyListGraph result = new MyListGraph(this.m_bDigraph); List <int> p_fNodes = new List <int>(); List <MyGraphEdge> p_fEdges = new List <MyGraphEdge>(); p_fNodes.Add(startNode.getIndex()); while (p_fEdges.Count < this.m_Nodes.Count) { MyGraphEdge edge = PrimFindEdge(p_fNodes, p_fEdges); if (edge != null) { p_fNodes.Add(edge.GetTo()); p_fEdges.Add(edge); } else { // Đồ thị không liên thông break; } } for (int i = 0; i < p_fNodes.Count; i++) { result.AddNode(new MyGraphNode(p_fNodes[i])); } for (int i = 0; i < p_fEdges.Count; i++) { result.AddEdge(p_fEdges[i]); } return(result); }
public MyMap() { m_cGraph = new MyListGraph(); m_cNodeMap = new Dictionary<int, MyMapNode>(); }
/// <summary> /// Tìm cây khung có trọng số nhỏ nhất /// </summary> /// <returns></returns> public MyListGraph PrimAlgo(MyGraphNode startNode) { MyListGraph result = new MyListGraph(this.m_bDigraph); List<int> p_fNodes = new List<int>(); List<MyGraphEdge> p_fEdges = new List<MyGraphEdge>(); p_fNodes.Add(startNode.getIndex()); while (p_fEdges.Count < this.m_Nodes.Count) { MyGraphEdge edge = PrimFindEdge(p_fNodes, p_fEdges); if (edge != null) { p_fNodes.Add(edge.GetTo()); p_fEdges.Add(edge); } else { // Đồ thị không liên thông break; } } for (int i = 0; i < p_fNodes.Count; i++) { result.AddNode(new MyGraphNode(p_fNodes[i])); } for (int i = 0; i < p_fEdges.Count; i++) { result.AddEdge(p_fEdges[i]); } return result; }