public LinkedList <Position> GetOptimalRoute(Position start, Position end) { List <Position> positions = PositionRepository.GetAllPosition(); Dijkstra.GraphBuilder graphBuilder = new Dijkstra.GraphBuilder(); Dijkstra.Graph <Position> graph = SetGraph(positions, start, end); return(graphBuilder.Search(start, end, graph)); }
Dijkstra.Graph <Position> SetGraph(List <Position> positions, Position start, Position end) { Dijkstra.Graph <Position> graph = new Dijkstra.Graph <Position>(); List <Position> addedPositions = new List <Position>(); graph.AddNode(start); addedPositions.Add(start); graph.AddNode(end); addedPositions.Add(end); positions.ForEach(i => { if (i.X % 2 != 0 || i.Y % 2 != 0) { graph.AddNode(i); addedPositions.Add(i); } }); addedPositions.ForEach(i => { addedPositions.ForEach(j => { if ( (i.X == j.X + 1 && i.Y == j.Y) || (i.X == j.X - 1 && i.Y == j.Y) || (i.Y == j.Y + 1 && i.X == j.X) || (i.Y == j.Y - 1 && i.X == j.X) ) { graph.AddEdge(i, j, 1); } }); }); return(graph); }