private void AddEdges(GraphToColor graph, IEnumerable <XmlNode> inputNodes) { var intInput = inputNodes .Select(vertex => vertex.ChildNodes) .Select( firstSecond => Tuple.Create(int.Parse(firstSecond.Item(0).InnerText), int.Parse(firstSecond.Item(1).InnerText))); foreach (var(item1, item2) in intInput) { graph.AddEdge(item1, item2); } }
private void CheckResultColoring(GraphToColor graph, int[] resultColoring) { var dictKeysValues = graph.GetAdjacencyDictKeysValues(); foreach (var(currentVertex, adjacentVertexes) in dictKeysValues) { foreach (var vertex in adjacentVertexes) { if (vertex != currentVertex && resultColoring[vertex] == resultColoring[currentVertex]) { Assert.Fail($"Adjacent vertexes with the same color: {vertex} {currentVertex}"); } } } }
public void GraphColoringTest(string input) { var docXml = new XmlDocument(); docXml.LoadXml(input); var inputXmlNodes = docXml .DocumentElement .ChildNodes .OfType <XmlNode>() .ToArray(); var graph = new GraphToColor(int.Parse(inputXmlNodes.First().InnerText)); AddEdges(graph, inputXmlNodes.Skip(1)); CheckResultColoring(graph, graph.GreedyColoring()); }
public static void Main(string[] args) { var graph = new GraphToColor(5); // graph.AddEdge(0, 1); // graph.AddEdge(0, 2); // graph.AddEdge(1, 2); // graph.AddEdge(1, 4); // graph.AddEdge(2, 4); // graph.AddEdge(4, 3); graph.AddEdge(0, 1); graph.AddEdge(0, 2); graph.AddEdge(1, 2); graph.AddEdge(1, 3); graph.AddEdge(2, 3); graph.AddEdge(3, 4); Console.Write(string.Join(" ", graph.GreedyColoring())); }