示例#1
0
        public void Run_ShortGraph_PathFound()
        {
            // ARRAGE
            var expectedPath = new List <IGraphNode>();

            var map = new GraphMap();

            map.AddNode(new HexNode(0, 0));
            map.AddNode(new HexNode(1, 0));
            map.AddNode(new HexNode(0, 1));

            var nodesArray = map.Nodes.ToArray();

            map.AddEdge(nodesArray[0], nodesArray[2]);
            map.AddEdge(nodesArray[2], nodesArray[1]);

            expectedPath.Add(nodesArray[0]);
            expectedPath.Add(nodesArray[2]);
            expectedPath.Add(nodesArray[1]);

            var context = CreatePathFindingContext(map);

            var astar = new AStar(context, expectedPath.First(), expectedPath.Last());

            // ACT
            var factState = astar.Run();

            // ASSERT

            factState.Should().Be(State.GoalFound);

            var factPath = astar.GetPath();

            factPath.Should().BeEquivalentTo(expectedPath);
        }
示例#2
0
        public void FindNonBlockedNode_RoomWithCorridor_ExitNotBlocked()
        {
            // ARRANGE
            var map = new GraphMap();

            // В этом тесте можно использовать более простые реализации IMapNode

            // генерируем комнату
            var node00 = new HexNode(0, 0);

            map.AddNode(node00);
            var node10 = new HexNode(1, 0);

            map.AddNode(node10);

            var node01 = new HexNode(0, 1);

            map.AddNode(node01);
            var node11 = new HexNode(1, 1);

            map.AddNode(node11);

            map.AddEdge(node00, node10);
            map.AddEdge(node00, node01);

            map.AddEdge(node11, node10);
            map.AddEdge(node11, node01);

            var regionNodes = new IMapNode[] { node00, node01, node10, node11 };

            // генерируем выход
            var corridorNode = new HexNode(2, 0);

            map.AddNode(corridorNode);
            map.AddEdge(corridorNode, node10);



            // ACT
            var node = MapRegionHelper.FindNonBlockedNode(node10, map, regionNodes);


            // ASSERT
            node.Should().NotBe(node10);
            node.Should().NotBe(corridorNode);
        }
示例#3
0
    void Start()
    {
        graph = new GraphMap(maxNodes);
        for (int i = 0; i <= maxNodes; i++)
        {
            graph.AddNode(i.ToString());
        }

        graph.AddUndirectedEdge(11, 6, 1);
        graph.AddUndirectedEdge(0, 9, 1);
        graph.AddUndirectedEdge(1, 2, 1);
        graph.AddUndirectedEdge(0, 1, 1);
        graph.AddUndirectedEdge(10, 1, 1);
        graph.AddUndirectedEdge(11, 5, 1);
        graph.AddUndirectedEdge(2, 3, 1);
        graph.AddUndirectedEdge(4, 5, 1);
        graph.AddUndirectedEdge(8, 9, 1);
        graph.AddUndirectedEdge(6, 7, 1);
        graph.AddUndirectedEdge(7, 8, 1);
        graph.AddUndirectedEdge(0, 6, 1);
        graph.AddUndirectedEdge(3, 4, 1);
        graph.AddUndirectedEdge(0, 2, 1);
        graph.AddUndirectedEdge(11, 7, 1);
        graph.AddUndirectedEdge(0, 8, 1);
        graph.AddUndirectedEdge(0, 4, 1);
        graph.AddUndirectedEdge(9, 10, 1);
        graph.AddUndirectedEdge(0, 5, 1);
        graph.AddUndirectedEdge(0, 7, 1);
        graph.AddUndirectedEdge(0, 3, 1);
        graph.AddUndirectedEdge(0, 10, 1);
        graph.AddUndirectedEdge(5, 6, 1);

        target = graph.SearchForNode(10.ToString());
        start  = graph.SearchForNode(11.ToString());

//		int bfs = BreadthFirstSearch(start, target);
//		Debug.Log ("bfs: " + bfs);
        int dks = Dijkstra(start, target);

        Debug.Log("dikjstra: " + dks);
        Debug.Log(graph.PrintPathRecursive(target, " "));
    }