private void CalcPathFromParent(Pos[,] parent) { int y = _board.DestY; int x = _board.DestX; while (parent[y, x].Y != y || parent[y, x].X != x) { _points.Add(new Pos(y, x)); Pos pos = parent[y, x]; y = pos.Y; x = pos.X; } _points.Add(new Pos(y, x)); _points.Reverse(); }
List <Vector2Int> CalcCellPathFromParent(Pos[,] parent, Pos dest) { List <Vector2Int> cells = new List <Vector2Int>(); int y = dest.Y; int x = dest.X; while (parent[y, x].Y != y || parent[y, x].X != x) { cells.Add(Pos2Cell(new Pos(y, x))); Pos pos = parent[y, x]; y = pos.Y; x = pos.X; } cells.Add(Pos2Cell(new Pos(y, x))); cells.Reverse(); return(cells); }
void CalcPathFromParent(Pos[,] parent) { // 목적지로부터 시작점까지 거슬러올라감 int y = _board.DestY; int x = _board.DestX; while (parent[y, x].Y != y || parent[y, x].X != x) { _points.Add(new Pos(y, x)); // 부모노드 좌표로 이동 Pos pos = parent[y, x]; y = pos.Y; x = pos.X; } // 여기서의 y, x좌표는 시작점 _points.Add(new Pos(y, x)); // 끝점에 도달하는 순간 _points에 add를 안하고 빠져나오기 때문에 // 역순서로 들어왔으니 뒤집자 _points.Reverse(); }
private List <Pos> CalcPathFromParent(Pos[,] parent) { List <Pos> _points = new List <Pos>(); // BFS 역순으로 길 찾기 int y = _board.DestY; int x = _board.DestX; Pos parentPos; while (parent[y, x].Y != y || parent[y, x].X != x) { _points.Add(new Pos(y, x)); parentPos = parent[y, x]; y = parentPos.Y; x = parentPos.X; } _points.Add(new Pos(y, x)); _points.Reverse(); return(_points); }