Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
                    }
                }
            }
        }
Exemple #4
0
        public void TraverseGraph(string startingVertexUniqueKey, GraphVisitor visitor)
        {
            GraphVertex start = g.GetVertexByUniqueKey(startingVertexUniqueKey);
            Dictionary <string, bool> visited = new Dictionary <string, bool>();

            InternalTraverseGraph(start, visitor, visited);
        }
Exemple #5
0
        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 });
        }
Exemple #6
0
        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);
                }
            }
        }
Exemple #7
0
        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]
                },
            });
        }