public void WeightedGraph_Smoke_Test() { var graph = new WeightedGraph <int, int>(); graph.AddVertex(1); graph.AddVertex(2); graph.AddVertex(3); graph.AddVertex(4); graph.AddVertex(5); graph.AddEdge(1, 2, 1); graph.AddEdge(2, 3, 2); graph.AddEdge(3, 4, 4); graph.AddEdge(4, 5, 5); graph.AddEdge(4, 1, 1); graph.AddEdge(3, 5, 6); Assert.AreEqual(2, graph.Edges(2).Count()); Assert.AreEqual(5, graph.VerticesCount); Assert.IsTrue(graph.HasEdge(1, 2)); graph.RemoveEdge(1, 2); Assert.IsFalse(graph.HasEdge(1, 2)); graph.RemoveEdge(2, 3); graph.RemoveEdge(3, 4); graph.RemoveEdge(4, 5); graph.RemoveEdge(4, 1); Assert.IsTrue(graph.HasEdge(3, 5)); graph.RemoveEdge(3, 5); Assert.IsFalse(graph.HasEdge(3, 5)); graph.RemoveVertex(1); graph.RemoveVertex(2); graph.RemoveVertex(3); graph.RemoveVertex(4); graph.RemoveVertex(5); Assert.AreEqual(0, graph.VerticesCount); }
private static int GetDistance(char vertex, int remainingVerticeCount, string visited, int accumulator) { var startingVertex = char.Parse(visited.Substring(0, 1)); var edges = graph.Edges(vertex); if (remainingVerticeCount == 0) { var edge = edges.Find(e => e.Item1 == startingVertex); if (edge != null) { return(accumulator + edge.Item2); } else { return(int.MaxValue); } } var distList = new List <int>(); for (int i = 0; i < edges.Count; i++) { var edge = edges[i]; var v = edge.Item1; var w = edge.Item2; if (visited.Contains(v)) { continue; } var dist = GetDistance(v, remainingVerticeCount - 1, visited + "_" + v, accumulator + w); if (dist != int.MaxValue) { distList.Add(dist); } } if (distList.Count == 0) { return(int.MaxValue); } return(distList.Min()); }