Example #1
0
        public void BreadthFirst_Smoke_Test()
        {
            var graph = new Graph <char>();

            graph.AddVertex('A');
            graph.AddVertex('B');
            graph.AddVertex('C');
            graph.AddVertex('D');
            graph.AddVertex('E');

            graph.AddVertex('F');
            graph.AddVertex('G');
            graph.AddVertex('H');
            graph.AddVertex('I');

            graph.AddEdge('A', 'B');
            graph.AddEdge('B', 'C');
            graph.AddEdge('C', 'D');
            graph.AddEdge('D', 'E');
            graph.AddEdge('E', 'F');
            graph.AddEdge('F', 'G');
            graph.AddEdge('G', 'H');
            graph.AddEdge('H', 'I');

            var algorithm = new BreadthFirst <char>();

            Assert.IsTrue(algorithm.Find(graph, 'D'));

            Assert.IsFalse(algorithm.Find(graph, 'M'));
        }
        public void BreadthFirst_AdjacencyListGraph_Smoke_Test()
        {
            var graph = new Advanced.Algorithms.DataStructures.Graph.AdjacencyList.Graph <char>();

            graph.AddVertex('A');
            graph.AddVertex('B');
            graph.AddVertex('C');
            graph.AddVertex('D');
            graph.AddVertex('E');

            graph.AddVertex('F');
            graph.AddVertex('G');
            graph.AddVertex('H');
            graph.AddVertex('I');

            graph.AddEdge('A', 'B');
            graph.AddEdge('B', 'C');
            graph.AddEdge('C', 'D');
            graph.AddEdge('D', 'E');
            graph.AddEdge('E', 'F');
            graph.AddEdge('F', 'G');
            graph.AddEdge('G', 'H');
            graph.AddEdge('H', 'I');

            var algorithm = new BreadthFirst <char>();

            Assert.IsTrue(algorithm.Find(graph, 'D'));

            Assert.IsFalse(algorithm.Find(graph, 'M'));
        }
Example #3
0
        public void BreadthFirstPath()
        {
            var solver = new BreadthFirst <TestNode>(_start, _end);

            solver.Run();
            Assert.Multiple(() =>
            {
                CollectionAssert.AreEqual(
                    new List <TestNode> {
                    _testGraph.GetNode(0, 1), _testGraph.GetNode(0, 2), _testGraph.GetNode(0, 3), _testGraph.GetNode(0, 4), _testGraph.GetNode(0, 5), _testGraph.GetNode(0, 6), _testGraph.GetNode(0, 7), _testGraph.GetNode(1, 8), _testGraph.GetNode(2, 9), _testGraph.GetNode(3, 8), _testGraph.GetNode(4, 7), _testGraph.GetNode(5, 6), _testGraph.GetNode(6, 6), _testGraph.GetNode(7, 7), _testGraph.GetNode(8, 8), _testGraph.GetNode(9, 9)
                },
                    solver.Path
                    );
                CollectionAssert.AreEqual(
                    new List <TestNode> {
                    _testGraph.GetNode(7, 6)
                },
                    solver.Open
                    );
                CollectionAssert.AreEqual(
                    new List <TestNode> {
                    _testGraph.GetNode(0, 1), _testGraph.GetNode(1, 0), _testGraph.GetNode(1, 1), _testGraph.GetNode(0, 0), _testGraph.GetNode(0, 2), _testGraph.GetNode(1, 2), _testGraph.GetNode(2, 0), _testGraph.GetNode(2, 1), _testGraph.GetNode(2, 2), _testGraph.GetNode(0, 3), _testGraph.GetNode(1, 3), _testGraph.GetNode(2, 3), _testGraph.GetNode(3, 0), _testGraph.GetNode(3, 1), _testGraph.GetNode(3, 2), _testGraph.GetNode(3, 3), _testGraph.GetNode(0, 4), _testGraph.GetNode(4, 0), _testGraph.GetNode(4, 1), _testGraph.GetNode(4, 2), _testGraph.GetNode(4, 3), _testGraph.GetNode(0, 5), _testGraph.GetNode(1, 5), _testGraph.GetNode(5, 0), _testGraph.GetNode(5, 1), _testGraph.GetNode(5, 2), _testGraph.GetNode(5, 3), _testGraph.GetNode(0, 6), _testGraph.GetNode(1, 6), _testGraph.GetNode(2, 5), _testGraph.GetNode(2, 6), _testGraph.GetNode(6, 0), _testGraph.GetNode(6, 1), _testGraph.GetNode(6, 2), _testGraph.GetNode(6, 3), _testGraph.GetNode(6, 4), _testGraph.GetNode(0, 7), _testGraph.GetNode(1, 7), _testGraph.GetNode(7, 0), _testGraph.GetNode(7, 1), _testGraph.GetNode(7, 2), _testGraph.GetNode(7, 3), _testGraph.GetNode(7, 4), _testGraph.GetNode(2, 7), _testGraph.GetNode(0, 8), _testGraph.GetNode(1, 8), _testGraph.GetNode(8, 2), _testGraph.GetNode(8, 3), _testGraph.GetNode(8, 4), _testGraph.GetNode(6, 5), _testGraph.GetNode(2, 8), _testGraph.GetNode(3, 5), _testGraph.GetNode(3, 6), _testGraph.GetNode(3, 7), _testGraph.GetNode(0, 9), _testGraph.GetNode(1, 9), _testGraph.GetNode(2, 9), _testGraph.GetNode(9, 2), _testGraph.GetNode(9, 3), _testGraph.GetNode(9, 4), _testGraph.GetNode(3, 8), _testGraph.GetNode(3, 9), _testGraph.GetNode(4, 7), _testGraph.GetNode(4, 8), _testGraph.GetNode(4, 9), _testGraph.GetNode(4, 6), _testGraph.GetNode(5, 6), _testGraph.GetNode(5, 7), _testGraph.GetNode(5, 8), _testGraph.GetNode(5, 9), _testGraph.GetNode(6, 6), _testGraph.GetNode(6, 7), _testGraph.GetNode(6, 8), _testGraph.GetNode(6, 9), _testGraph.GetNode(7, 7), _testGraph.GetNode(7, 8), _testGraph.GetNode(7, 9), _testGraph.GetNode(8, 6), _testGraph.GetNode(8, 7), _testGraph.GetNode(8, 8), _testGraph.GetNode(8, 9), _testGraph.GetNode(9, 6), _testGraph.GetNode(9, 7), _testGraph.GetNode(9, 8), _testGraph.GetNode(9, 9)
                },
                    solver.Closed
                    );
                Assert.AreEqual(16.0d, Math.Round(solver.PathCost));
            });
        }
Example #4
0
 public void GraphCannotBeNull()
 {
     typeof(BreadthFirst).Invoking(_ =>
                                   BreadthFirst.VisitAll(null, NodeIdentity.Of("A")).ToList())
     .Should().Throw <ArgumentNullException>()
     .Which.ParamName.Should().Be("graph");
 }
Example #5
0
        public void CanCountNodesDepth()
        {
            // Arrange
            Tree <string> tree = new Tree <string>();

            Node <string> root = new Node <string>("a");
            Node <string> b    = new Node <string>("b");
            Node <string> c    = new Node <string>("c");
            Node <string> d    = new Node <string>("d");
            Node <string> e    = new Node <string>("e");
            Node <string> f    = new Node <string>("f");
            Node <string> g    = new Node <string>("g");
            Node <string> h    = new Node <string>("h");
            Node <string> i    = new Node <string>("i");

            tree.Root = root;

            root.LeftChild  = b;
            root.RightChild = c;

            b.LeftChild  = d;
            b.RightChild = e;

            c.LeftChild  = f;
            c.RightChild = g;

            d.LeftChild  = h;
            d.RightChild = i;

            // Act
            int result = BreadthFirst.NodeDepths(root);

            // Assert
            Assert.Equal(16, result);
        }
Example #6
0
        public void Dijkstra_Solves_Raw_Data(int mapId, int xStart, int yStart, int xGoal, int yGoal, int expectedLength)
        {
            byte[,] map = mapId == 0 ? m_Map_0 : m_Map_1;

            List <Vector2Int> accessibles = new List <Vector2Int>();

            //We flip the array values to match horizontal values with X coords and vertical values with Y coords
            //So (0 , 0) coords starts from the bottom left and not from the top left and Y coords from bottom to top and not
            //from top to bottom as the default indexing 2D array system.
            for (int iRun = map.GetLength(0) - 1, i = 0; iRun >= 0; iRun--, i++)
            {
                for (int j = 0; j < map.GetLength(1); j++)
                {
                    if (map[iRun, j] == 0)
                    {
                        accessibles.Add(new Vector2Int(j, i));
                    }
                }
            }

            IPathFinder pathFinder        = new BreadthFirst(accessibles); //<-- TODO: Create Dijsktra pathfinder class here, TIP-->> Use accessible tiles
            IEnumerable <Vector2Int> path = pathFinder.FindPath(new Vector2Int(xStart, yStart), new Vector2Int(xGoal, yGoal));

            Assert.AreEqual(expectedLength, path.Count());
        }
Example #7
0
        public void whenDoBreadthFirstSearchInTheGraphShouldEqualToResult()
        {
            var bfs       = new BreadthFirst <int>();
            var bfsresult = bfs.search(graph);

            Assert.Equal("0 1 2 4 3 ", bfsresult);
        }
 public override void EndState()
 {
     if (Agent.WalkPath.Count > 1)
     {
         bool         endAutoWalk = false;
         BreadthFirst enemyScan   = new BreadthFirst();
         enemyScan.Search(Agent.CurrentNode, Agent.HighlighterRadius + 1);
         if (enemyScan.Done && enemyScan.Nodes != null)
         {
             foreach (var node in enemyScan.Nodes)
             {
                 if (node.HasEnemy)
                 {
                     endAutoWalk = true;
                     break;
                 }
             }
         }
         if (endAutoWalk == false)
         {
             Agent.WalkPath.RemoveAt(0);
         }
         else
         {
             Agent.WalkPath = null;
         }
     }
     else
     {
         Agent.WalkPath = null;
     }
 }
Example #9
0
        public void CanCountTreeNodesBreadth()
        {
            // Arrange
            Tree <string> tree = new Tree <string>();

            Node <string> root = new Node <string>("a");
            Node <string> b    = new Node <string>("b");
            Node <string> c    = new Node <string>("c");
            Node <string> d    = new Node <string>("d");
            Node <string> e    = new Node <string>("e");
            Node <string> f    = new Node <string>("f");
            Node <string> g    = new Node <string>("g");

            tree.Root = root;

            root.LeftChild  = b;
            root.RightChild = c;

            b.LeftChild  = d;
            b.RightChild = e;

            c.LeftChild  = f;
            c.RightChild = g;

            // Act
            int result = BreadthFirst.CountTreeNodesBreath(tree);

            // Assert
            Assert.Equal(7, result);
        }
Example #10
0
 public BattleManager()
 {
     tilesManager     = new BattleTilesManager();
     calculateManager = new BattleCalculateManager();
     aiManager        = new AIManager();
     breadthFirst     = new BreadthFirst();
 }
Example #11
0
        private void RunBuntton_ItemClick(object sender, ItemClickEventArgs e)
        {
            if (_dGraph == null) //|| _dGraph.Vertices.Any(v => v.Visited))
            {
                MessageBox.Show("Загрузите новый лабиринт!", "Warning", MessageBoxButtons.OK,
                                MessageBoxIcon.Warning);
                return;
            }
            //запускаем параллельно все наши алгоритмы
            if (dijkstraButton.Down)
            {
                Task.Run(() => DijkstraAlgorithm.Execute(_dGraph, dijkstraPanel, dijkstraFirst, dijkstraBest));
                return;
            }

            if (bfsButton.Down)
            {
                Task.Run(() => BreadthFirst.Execute(_bGraph, bFirstPanel, bfFirst, bfBest));
                return;
            }

            if (astarButton.Down)
            {
                Task.Run(() => AStar.Execute(_aGraph, aStarPanel, asFirst, asBest));
                return;
            }
            Task.Run(() => DijkstraAlgorithm.Execute(_dGraph, dijkstraPanel, dijkstraFirst, dijkstraBest));
            Task.Run(() => BreadthFirst.Execute(_bGraph, bFirstPanel, bfFirst, bfBest));
            Task.Run(() => AStar.Execute(_aGraph, aStarPanel, asFirst, asBest));
        }
Example #12
0
 public void StartCannotBeNull()
 {
     typeof(BreadthFirst).Invoking(_ =>
                                   BreadthFirst.VisitAll(CreateSimpleGraph(), null).ToList())
     .Should().Throw <ArgumentNullException>()
     .Which.ParamName.Should().Be("start");
 }
Example #13
0
        private bool Solve(string selectedAlgorithm)
        {
            TraversalType TraversalType = null;

            switch (selectedAlgorithm)
            {
            case "BreadthFirst":
                TraversalType = new BreadthFirst(_Map);
                break;

            case "DepthFirst":
                TraversalType = new DepthFirst(_Map);
                break;

            case "DeadEndFill":
                TraversalType = new DeadEndFill(_Map);
                break;

            case "FibonacciHeap":
                break;

            case "LeftTurn":
                break;

            default:
                break;
            }

            return(TraversalType.Solve());
        }
Example #14
0
        public void ReturnsEmptyPathIfNoPathIsFound()
        {
            var path = (object)BreadthFirst.FindPath(CreateSimpleGraph(),
                                                     NodeIdentity.Of("A"),
                                                     node => node == NodeIdentity.Of("notfound"));

            path.Should().Be(Path.Empty);
        }
        public void BreadthFirstTraversal()
        {
            const string result = "ABCDEFG";
            // TODO replace me with your implementation of a breadth-first traverser
            ITraverser traverser = new BreadthFirst();

            Assert.AreEqual(result, traverser.Traverse(BT));
        }
Example #16
0
 private void Start()
 {
     grid         = GetComponent <Grid>();
     astar        = new AStar();
     breadthFirst = new BreadthFirst();
     depthFirst   = new DepthFirst();
     dijkstra     = new Dijkstra();
     greedyBfs    = new GreedyBestFirst();
 }
Example #17
0
 public void CanFindStraightPath()
 {
     BreadthFirst.FindPath(GraphFactory.BuildGraph("A-B", "B-C", "C-D"), NodeIdentity.Of("A"), node => node == NodeIdentity.Of("D"))
     .Should().ContainInOrder(
         NodeIdentity.Of("A"),
         NodeIdentity.Of("B"),
         NodeIdentity.Of("C"),
         NodeIdentity.Of("D")
         ).And.HaveCount(4);
 }
Example #18
0
 public void DoesNotVisitDisconnectedNodes()
 {
     BreadthFirst.VisitAll(
         GraphFactory.BuildGraph("A-B", "C-D"), NodeIdentity.Of("A"))
     .Should()
     .ContainInOrder(
         NodeIdentity.Of("A"),
         NodeIdentity.Of("B")
         ).And.HaveCount(2);
 }
Example #19
0
 public void VisitsNodesInOrder()
 {
     BreadthFirst.VisitAll(CreateSimpleGraph(), NodeIdentity.Of("A"))
     .Should().ContainInOrder(
         NodeIdentity.Of("A"),
         NodeIdentity.Of("B1"),
         NodeIdentity.Of("B2"),
         NodeIdentity.Of("C1"),
         NodeIdentity.Of("C2")
         ).And.HaveCount(5);
 }
Example #20
0
 public void FindsShortestPath()
 {
     BreadthFirst.FindPath(
         GraphFactory.BuildGraph("A-B", "B-C", "C-D", "A-D"),
         NodeIdentity.Of("A"),
         node => node == NodeIdentity.Of("D"))
     .Should().ContainInOrder(
         NodeIdentity.Of("A"),
         NodeIdentity.Of("D")
         ).And.HaveCount(2);
 }
Example #21
0
        //     throws jjtraveler.VisitFailure
        public virtual void testBreadthFirst()
        {
            Identity id = new Identity();
            Logger expected = new Logger(id, new IVisitable[]{n4, n3, n2, n0, n1} );

            BreadthFirst bf = new BreadthFirst( logVisitor(id) );

            IVisitable resultNode = bf.visit(n4);
            Assertion.AssertEquals(expected, logger);
            Assertion.AssertEquals(resultNode, n4);
        }
Example #22
0
    static void StartBreadthFirst(int initstate)
    {
        try
        {
            BreadthFirst o = new BreadthFirst(initstate);
            Console.Write("\rBreadth First Search starts . . . Please wait");
            o.Solve();
        }

        catch (Exception e)
        {
            HandleException(e);
        }
    }
        public void VertexDoesNotExist()
        {
            // Arrange
            var graph = new Graph <char>();

            graph.AddVertex('A');
            graph.AddVertex('B');

            graph.AddEdge('A', 'B');

            var breadthFirst = new BreadthFirst <char>();

            // Act & Assert
            Assert.False(breadthFirst.Find(graph, 'X'));
        }
        public void Test()
        {
            // Arrange
            var graph = new Graph <char>();

            graph.AddVertex('A');
            graph.AddVertex('B');
            graph.AddVertex('C');
            graph.AddVertex('D');

            graph.AddEdge('A', 'B');
            graph.AddEdge('B', 'C');
            graph.AddEdge('C', 'D');

            var breadthFirst = new BreadthFirst <char>();

            // Act & Assert
            Assert.True(breadthFirst.Find(graph, 'A'));
        }
Example #25
0
        public static Path Extend(this Path firstPath, Path secondPath, DirectedGraph graph)
        {
            ArgumentHelpers.ThrowIfNull(() => firstPath);
            ArgumentHelpers.ThrowIfNull(() => secondPath);
            ArgumentHelpers.ThrowIfNull(() => graph);

            var overlap = OverlapFinder.FindOverlap(firstPath, secondPath);

            if (!Path.IsEmpty(overlap))
            {
                return(overlap);
            }
            var shortestPath = BreadthFirst.FindPath(graph, firstPath.End, node => node == secondPath.Start);

            if (Path.IsEmpty(shortestPath))
            {
                return(Path.Empty);
            }
            return(Path.Join(firstPath, Path.Of(shortestPath.GetRange(1, shortestPath.Length - 2)), secondPath));
        }
Example #26
0
        private void RunAlgorithm(string _algoName, Graph _graph)
        {
            // Variables
            DateTime  beginning;
            DateTime  end;
            TimeSpan  duration;
            Algorithm algo = null;

            // Création de l'algorithme
            switch (_algoName)
            {
            case "Depth-First":
                algo = new DepthFirst(_graph, this);                     // Algorithm(Graph _graph, IHM _ihm).
                break;

            case "Breadth-First":
                algo = new BreadthFirst(_graph, this);
                break;

            case "Bellman-Ford":
                algo = new BellmanFord(_graph, this);
                break;

            case "Dijkstra":
                algo = new Dijkstra(_graph, this);
                break;

            case "A*":
                algo = new AStar(_graph, this);
                break;
            }

            // Résolution
            Console.Out.WriteLine("Algorithme : " + _algoName);
            beginning = DateTime.Now;
            algo.Solve();
            end      = DateTime.Now;
            duration = end - beginning;
            Console.Out.WriteLine("Durée (ms) : " + duration.TotalMilliseconds.ToString() + "\n");
        }
Example #27
0
        public override void Start()
        {
            _exitingIdle = false;

            Manager.RemoveDeadEnemies();

            BreadthFirst enemyScan = new BreadthFirst();

            enemyScan.Search(Manager.GetPlayerAgent().CurrentNode, Manager.GetPlayerAgent().HighlighterRadius + 1); //Scan for enemies in given range
            if (enemyScan.Done && enemyScan.Nodes != null)
            {
                HashSet <EnemyAgent> currentEnemies = Manager.GetEnemyHashSet();

                foreach (var node in enemyScan.Nodes)
                {
                    if (node.HasEnemy)
                    {
                        EnemyAgent enemy = (node.Occupant as EnemyAgent);
                        if (enemy != null)
                        {
                            if (!currentEnemies.Contains(enemy))
                            {
                                Debug.Log("Enemy " + enemy.AgentName + " has been successfully added!");
                                Manager.AddEnemy(enemy);
                            }
                            else
                            {
                                Debug.Log("Enemy " + enemy.AgentName + " already was an enemy!");
                            }
                        }
                        else
                        {
                            Debug.Log("Something went wrong while adding the enemy to the gamephase");
                        }
                    }
                }
            }
        }
Example #28
0
 private void MoveEnemy(List <GameEntity> enemies, GameEntity player, Dictionary <Vector2Int, TileType> map)
 {
     enemies.ForEach(enemy => {
         PathNode result = BreadthFirst.GetRoute(enemy.gridCoordinate.value, player.gridCoordinate.value, map, 4);
         if (result != null)
         {
             enemy.ReplacePosition(result.GetFirstStep());
             enemy.ReplaceGridCoordinate(result.GetFirstStep());
         }
         else
         {
             Vector2Int randomPos = new List <Vector2Int> {
                 enemy.gridCoordinate.value + Vector2Int.up,
                 enemy.gridCoordinate.value + Vector2Int.down,
                 enemy.gridCoordinate.value + Vector2Int.left,
                 enemy.gridCoordinate.value + Vector2Int.right
             }.FindAll(pos => IsFloorTile(pos, map)).RandomItem();
             enemy.ReplacePosition(randomPos);
             enemy.ReplaceGridCoordinate(randomPos);
         }
         enemy.isMoveCompleted = true;
     });
 }
    private void RebuildMaze(VertexLinker builder)
    {
        Debug.Log("rebuilding " + builder.ToString());

        PolarGrid maze = (PolarGrid)target;

        maze.Graph.ClearLinks();
        builder.Build(new VertexLinkerHelper(maze.Graph, maze.AdjacentGraph));
        EditorUtility.SetDirty(maze);

        BreadthFirst bf = new BreadthFirst(maze.Graph, 0);

        bf.Run();
        int[] distances   = bf.Distances;
        float maxDistance = (float)bf.MaxDistance;
        Color nearColor   = Color.red;
        Color farColor    = Color.black;

        Color[] distanceColors = System.Array.ConvertAll <int, Color>(
            distances, distance => Color.Lerp(nearColor, farColor, (distance / maxDistance))
            );
        image.Draw(maze, distanceColors);
    }
 private void Start()
 {
     _breadthFirst = new BreadthFirst();
     _highlights   = new List <GameObject>();
 }
Example #31
0
        private void Run()
        {
            // 1st map
            String mapStr = "..  XX   .\n"
                            + "*.  *X  *.\n"
                            + " .  XX ...\n"
                            + " .* X *.* \n"
                            + " ...=...  \n"
                            + " .* X     \n"
                            + " .  XXX*  \n"
                            + " .  * =   \n"
                            + " .... XX  \n"
                            + "   *.  X* ";
            Map       map  = new Map(mapStr, 0, 0, 9, 9);
            Algorithm algo = new DepthFirst(map, this);

            algo.Solve();
            Console.WriteLine();
            algo = new BreadthFirst(map, this);
            algo.Solve();
            Console.WriteLine();
            algo = new BellmanFord(map, this);
            algo.Solve();
            Console.WriteLine();
            algo = new Dijkstra(map, this);
            algo.Solve();
            Console.WriteLine();
            algo = new AStar(map, this);
            algo.Solve();
            Console.WriteLine();

            // 2nd map
            mapStr = "...*     X .*    *  \n"
                     + " *..*   *X .........\n"
                     + "   .     =   *.*  *.\n"
                     + "  *.   * XXXX .    .\n"
                     + "XXX=XX   X *XX=XXX*.\n"
                     + "  *.*X   =  X*.  X  \n"
                     + "   . X * X  X . *X* \n"
                     + "*  .*XX=XX *X . XXXX\n"
                     + " ....  .... X . X   \n"
                     + " . *....* . X*. = * ";
            map  = new Map(mapStr, 0, 0, 9, 19);
            algo = new DepthFirst(map, this);
            algo.Solve();
            Console.WriteLine();
            algo = new BreadthFirst(map, this);
            algo.Solve();
            Console.WriteLine();
            algo = new BellmanFord(map, this);
            algo.Solve();
            Console.WriteLine();
            algo = new Dijkstra(map, this);
            algo.Solve();
            Console.WriteLine();
            algo = new AStar(map, this);
            algo.Solve();
            Console.WriteLine();

            Console.ReadKey();
        }
Example #32
0
        private (List <Position>, List <Position>) BFS(Position a, Position b)
        {
            BreadthFirst bfsSearch = new BreadthFirst();

            return(bfsSearch.Search(a, b, grid));
        }