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); }
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); }
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, " ")); }