public List <Coordinate> BfsSearch(Coordinate start, Coordinate end) { Queue <Coordinate> queue = new Queue <Coordinate>(); queue.Enqueue(start); SearchResource.Clear(); VisitedGraph[start.X, start.Y] = true; bool isFound = false; while (queue.Count != 0) { var c = queue.Dequeue(); if (c == end) { isFound = true; break; } for (int i = 0; i < 4; ++i) { var co = new Coordinate() { X = c.X + XDirections[i], Y = c.Y + YDirections[i] }; if ((IsValid(co) || co == end) && !VisitedGraph[co.X, co.Y]) { queue.Enqueue(co); VisitedGraph[co.X, co.Y] = true; PathFound[co.X, co.Y] = c; } } } if (isFound) { return(GetPath(start, end)); } return(null); }
private Coordinate?FindLongestPath(Coordinate target, Coordinate start) { CandidatePaths.Clear(); var nowList = new List <Coordinate>(); SearchResource.Clear(); Dfs(CandidatePaths, nowList, start, 0); int maxLen = 0; List <Coordinate> maxList = null; foreach (var l in CandidatePaths) { if (l.Count > maxLen) { maxLen = l.Count; maxList = l; } } if (maxList == null) { return(null); } return(maxList.First()); }