public void TestGetGetConnectedComponents() { var map = GetMapFromSampleA(); var graphVisitor = new GraphVisitor(); var actual = graphVisitor.GetConnectedComponents(map); var component1 = new[] { node0, node1, node2, node3 }; var component2 = new[] { node4, node5, node6, node7 }; actual.GetComponent(myPunter.Id, node0.Id).ShouldAllBeEquivalentTo(component1.Select(x => x.Id)); actual.GetComponent(myPunter.Id, node4.Id).ShouldAllBeEquivalentTo(component2.Select(x => x.Id)); CheckComponents(component1, component1, actual, myPunter.Id, true); CheckComponents(component2, component2, actual, myPunter.Id, true); CheckComponents(component1, component2, actual, myPunter.Id, false); var component3 = new[] { node0, node1, node2, node7 }; var component4 = new[] { node3, node4, node5, node6 }; actual.GetComponent(otherPunter.Id, node0.Id).ShouldAllBeEquivalentTo(component3.Select(x => x.Id)); actual.GetComponent(otherPunter.Id, node3.Id).ShouldAllBeEquivalentTo(component4.Select(x => x.Id)); CheckComponents(component3, component3, actual, otherPunter.Id, true); CheckComponents(component4, component4, actual, otherPunter.Id, true); CheckComponents(component3, component4, actual, otherPunter.Id, false); }
public void TestGetReachableNodesForPunter(Node from, Map map, Punter punter, Node[] expected) { var graphVisitor = new GraphVisitor(); var actual = graphVisitor.GetReachableNodesForPunter(@from, map, punter); actual.ShouldAllBeEquivalentTo(expected); }
public void TraverseGraph(string startingVertexUniqueKey, GraphVisitor visitor) { Dictionary <string, bool> visited = new Dictionary <string, bool>(); Queue <GraphVertex> q = new Queue <GraphVertex>(); GraphVertex start = g.GetVertexByUniqueKey(startingVertexUniqueKey); q.Enqueue(start); while (q.Count > 0) { GraphVertex current = q.Dequeue(); visitor.Visit(current); visited[current.UniqueKey] = true; foreach (GraphVertex v in current.GetAdjacentVertices()) { if (!visited.ContainsKey(v.UniqueKey) && !q.Contains(v)) { q.Enqueue(v); } } } }
public void TraverseGraph(string startingVertexUniqueKey, GraphVisitor visitor) { GraphVertex start = g.GetVertexByUniqueKey(startingVertexUniqueKey); Dictionary <string, bool> visited = new Dictionary <string, bool>(); InternalTraverseGraph(start, visitor, visited); }
public void TestGetReachableNodesFromMinesForPunter() { var map = GetMapFromSampleA(); var graphVisitor = new GraphVisitor(); var actual = graphVisitor.GetReachableNodesFromMinesForPunter(map, myPunter); actual.ShouldAllBeEquivalentTo(new [] { node0, node1, node2, node3, node4, node5, node6, node7 }); }
public void InternalTraverseGraph(GraphVertex v, GraphVisitor visitor, Dictionary <string, bool> visited) { visitor.Visit(v); visited[v.UniqueKey] = true; foreach (GraphVertex adj in v.GetAdjacentVertices()) { if (!visited.ContainsKey(adj.UniqueKey)) { InternalTraverseGraph(adj, visitor, visited); } } }
public void TestGetBridgesInAvailableEdges() { var nodes = Enumerable.Range(0, 12).Select(x => new Node { Id = x }).ToArray(); var map = new Map(nodes, new[] { new Edge { Source = nodes[0], Target = nodes[1] }, new Edge { Source = nodes[1], Target = nodes[2] }, new Edge { Source = nodes[1], Target = nodes[3] }, new Edge { Source = nodes[2], Target = nodes[3] }, new Edge { Source = nodes[3], Target = nodes[4] }, new Edge { Source = nodes[3], Target = nodes[5] }, new Edge { Source = nodes[5], Target = nodes[6] }, new Edge { Source = nodes[2], Target = nodes[7] }, new Edge { Source = nodes[0], Target = nodes[7] }, new Edge { Source = nodes[7], Target = nodes[8] }, new Edge { Source = nodes[8], Target = nodes[9] }, new Edge { Source = nodes[8], Target = nodes[11] }, new Edge { Source = nodes[9], Target = nodes[10] }, new Edge { Source = nodes[11], Target = nodes[10] }, }); var graphVisitor = new GraphVisitor(); var actual = graphVisitor.GetBridgesInAvailableEdges(map, myPunter); actual.ShouldAllBeEquivalentTo(new Edge[] { new Edge { Source = nodes[3], Target = nodes[4] }, new Edge { Source = nodes[3], Target = nodes[5] }, new Edge { Source = nodes[5], Target = nodes[6] }, new Edge { Source = nodes[7], Target = nodes[8] }, }); }