예제 #1
0
 /// <summary>
 /// The export results to xml.
 /// </summary>
 /// <param name="graph">
 /// The graph.
 /// </param>
 /// <param name="path">
 /// The path.
 /// </param>
 public void ExportResultsToXml(Graph graph, string path)
 {
     var settings = new XmlWriterSettings { Encoding = Encoding.UTF8, Indent = true };
     using (var xmlWriter = XmlWriter.Create(path, settings))
     {
         xmlWriter.WriteStartDocument();
         xmlWriter.WriteStartElement("summary");
         xmlWriter.WriteElementString("numberOfNodes", graph.Count.ToString());
         xmlWriter.WriteElementString("numberOfEdges", graph.Edges.ToString());
         xmlWriter.WriteElementString("sourceNode", graph.Source);
         xmlWriter.WriteElementString("sinkNode", graph.Sink);
         xmlWriter.WriteElementString("maximumFlow", graph.MaximumFlow.ToString());
         xmlWriter.WriteEndElement();
         xmlWriter.WriteEndDocument();
     }
 }
예제 #2
0
        /// <summary>
        /// The export graph to xml.
        /// </summary>
        /// <param name="graph">
        /// The graph.
        /// </param>
        /// <param name="path">
        /// The path.
        /// </param>
        public void ExportGraphToXml(Graph graph, string path)
        {
            var settings = new XmlWriterSettings { Encoding = Encoding.UTF8, Indent = true };
            using (var xmlWriter = XmlWriter.Create(path, settings))
            {
                xmlWriter.WriteStartDocument();
                xmlWriter.WriteStartElement("graph");
                xmlWriter.WriteStartElement("vertices");
                foreach (GraphNode node in graph.Nodes)
                {
                    xmlWriter.WriteStartElement("vertex");
                    xmlWriter.WriteElementString("vertexId", node.VertexId);
                    xmlWriter.WriteElementString("mode", GetIntNodeMode(node.NodeMode));
                    xmlWriter.WriteEndElement();
                }

                xmlWriter.WriteEndElement();
                xmlWriter.WriteStartElement("edges");
                foreach (GraphNode node in graph.Nodes)
                {
                    foreach (GraphEdge edge in node.Neighbours)
                    {
                        if (edge.IsResidual)
                        {
                            continue;
                        }

                        xmlWriter.WriteStartElement("edge");
                        xmlWriter.WriteElementString("from", edge.NodeFrom.VertexId);
                        xmlWriter.WriteElementString("to", edge.NodeTo.VertexId);
                        xmlWriter.WriteElementString("flow", edge.MaxCapacity.ToString());
                        xmlWriter.WriteEndElement();
                    }
                }

                xmlWriter.WriteEndElement();
                xmlWriter.WriteEndElement();
                xmlWriter.WriteEndDocument();
            }
        }
예제 #3
0
        /// <summary>
        /// The parse nodes.
        /// </summary>
        /// <param name="xmlDoc">
        /// The xml doc.
        /// </param>
        /// <returns>
        /// Returns Graph object with added paresed nodes.
        /// </returns>
        private static Graph ParseNodes(XmlDocument xmlDoc)
        {
            var graph = new Graph();
            XmlNodeList xmlNodes = xmlDoc.GetElementsByTagName("vertex");
            for (int i = 0; i < xmlNodes.Count; i++)
            {
                GraphNode gnode = null;
                XmlNode xmlNode = xmlNodes[i].ChildNodes.Item(0);
                XmlNode xmlNodeMode = xmlNodes[i].ChildNodes.Item(1);
                if (xmlNode != null)
                {
                    string vertexId = xmlNode.InnerText;
                    if (xmlNodeMode != null)
                    {
                        string mode = xmlNodeMode.InnerText;
                        if (!string.IsNullOrEmpty(vertexId) && !string.IsNullOrEmpty(mode))
                        {
                            int nodem = GetStrNodeMode(mode);
                            gnode = new GraphNode(vertexId, nodem);
                        }
                    }
                    else
                    {
                        gnode = new GraphNode(vertexId, 0);
                    }
                }

                if (gnode != null)
                {
                    graph.AddNode(gnode);
                }
            }

            return graph;
        }
예제 #4
0
        /// <summary>
        /// The parse edges.
        /// </summary>
        /// <param name="graph">
        /// The graph.
        /// </param>
        /// <param name="xmlDoc">
        /// The xml doc.
        /// </param>
        /// <returns>
        /// Returns Graph object with added parsed edges.
        /// </returns>
        private static Graph ParseEdges(Graph graph, XmlDocument xmlDoc)
        {
            XmlNodeList xmlEdges = xmlDoc.GetElementsByTagName("edge");
            for (int i = 0; i < xmlEdges.Count; i++)
            {
                XmlNode xmlsNode = xmlEdges[i].ChildNodes.Item(0);
                XmlNode xmleNode = xmlEdges[i].ChildNodes.Item(1);
                XmlNode xmleCapacity = xmlEdges[i].ChildNodes.Item(2);
                if (xmlsNode != null && xmleNode != null && xmleCapacity != null)
                {
                    string xmlsNodeStr = xmlsNode.InnerText;
                    string xmleNodeStr = xmleNode.InnerText;
                    string xmleCapacityStr = xmleCapacity.InnerText;
                    int flow = int.Parse(xmleCapacityStr);
                    GraphNode startNode = graph.Nodes.FindByName(xmlsNodeStr);
                    GraphNode endNode = graph.Nodes.FindByName(xmleNodeStr);
                    graph.AddDirectedEdge(startNode, endNode, flow);
                }
            }

            return graph;
        }