[英]C# Stopping recursion
所以我做了一個迷宮,其中 '#' 是牆壁和 '.' 是可移動到的坐標。 當遞歸找到迷宮外時,我試圖停止它。 所以當 (x,y) 為 12 時。這可能是一個簡單的修復。
這是我的迷宮...
char[,] maze1 =
// USE THIS
{ { '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#' },
{ '#', '.', '.', '.', '#', '.', '.', '.', '.', '.', '.', '#' },
{ '#', '.', '#', '.', '#', '.', '#', '#', '#', '#', '.', '#' },
{ '#', '#', '#', '.', '#', '.', '.', '.', '.', '#', '.', '#' },
{ '#', '.', '.', '.', '.', '#', '#', '#', '.', '#', '.', '.' },
{ '#', '#', '#', '#', '.', '#', '.', '#', '.', '#', '.', '#' },
{ '#', '.', '.', '#', '.', '#', '.', '#', '.', '#', '.', '#' },
{ '#', '#', '.', '#', '.', '#', '.', '#', '.', '#', '.', '#' },
{ '#', '.', '.', '.', '.', '.', '.', '.', '.', '#', '.', '#' },
{ '#', '#', '#', '#', '#', '#', '.', '#', '#', '#', '.', '#' },
{ '#', '.', '.', '.', '.', '.', '.', '#', '.', '.', '.', '#' },
{ '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#' } };
這是我的方法...
private void mazeTraversal(int currentX, int currentY, char[,] maze)
{
/*************** ATTEMPT 1 ******************/
// Checks if coordinates are inside the maze
if (currentX <= 11 && currentY <= 11)
{
// Implement maze traversal recursive call
//PrintOriginalMaze(maze, currentX, currentY);
// If the coordinate is a '.' , continue(This is the base case)
if ('.' == maze[currentX, currentY])
{
// Changes location to a X so you cant go back.
maze[currentX, currentY] = 'X';
// Implement maze traversal recursive call
PrintOriginalMaze(maze, currentX, currentY);
mazeTraversal(currentX, currentY + 1, maze);
// maze[currentX, currentY] = 'X';
mazeTraversal(currentX - 1, currentY, maze);
//maze[currentX, currentY] = 'X';
mazeTraversal(currentX + 1, currentY, maze);
// maze[currentX, currentY] = 'X';
mazeTraversal(currentX, currentY - 1, maze);
//maze[currentX, currentY] = 'X';
}
if ('#' == maze[currentX, currentY])
{
Console.WriteLine("Hit a wall");
Console.WriteLine();
}
}
}
你真的應該在迷宮中放置一個“出口”節點。 在 [4][11] 我想。 然后,如果您找到出口(節點),這將是一個簡單的檢查。
你在這里遇到的是游戲板的古老問題:“我如何處理游戲場外的東西?” 和“如果我在邊境並想檢查所有相鄰的小區,我該怎么辦?”
在大多數情況下,你避免了這個問題。 你有一個牆的“邊界”。 在游戲板周圍放置不可進入的邊框是解決方案之一。 另一個將處理所有這些索引檢查。 但我個人更喜歡考慮邊界。
如果我理解你的問題,你正試圖確定當前的x
和y
在外面的迷宮的邊界( array
)
你可以使用Array.GetUpperBound(Int32)
獲取數組中指定維度的最后一個元素的索引。
var maxX = maze1.GetUpperBound(0);
var maxY = maze1.GetUpperBound(1);
if (currentX > maxX || currentX < 0 || currentY > maxY || currentY < 0)
return;
停止遞歸只是一致地(在某種狀態下)退出方法以展開調用,即在當前xy
超出邊界時使用return
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.