csharp 使用递归实现解决方案以在迷宫中查找路径的示例。从C#h的计算机编程基础知识出发

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp 使用递归实现解决方案以在迷宫中查找路径的示例。从C#h的计算机编程基础知识出发相关的知识,希望对你有一定的参考价值。

static char[,] lab =
{
  {' ', ' ', ' ', '*', ' ', ' ', ' '},
  {'*', '*', ' ', '*', ' ', '*', ' '},
  {' ', ' ', ' ', ' ', ' ', ' ', ' '},
  {' ', '*', '*', '*', '*', '*', ' '},
  {' ', ' ', ' ', ' ', ' ', ' ', 'e'},
};

static char[] path = new char[lab.GetLength(0) * lab.GetLength(1)];
static int position = 0;

static void FindPath(int row, int col, char direction)
{
  if ((col < 0) || (row < 0) || 
    (col >= lab.GetLength(1)) || (row >= lab.GetLength(0)))
  {
    // We are out of the labyrinth
    return;
  }
  // Append the direction to the path
  path[position] = direction;
  position++;
  
  // Check if we have found the exit
  if (lab[row, col] == 'e')
  {
    PrintPath(path, 1, position - 1);
  }
  
  if (lab[row, col] == ' ')
  {
    // The current cell is free. Mark it as visited
    lab[row, col] = 's';
    
    // Invoke recursion to explore all possible directions
    FindPath(row, col - 1, 'L'); // left
    FindPath(row - 1, col, 'U'); // up
    FindPath(row, col + 1, 'R'); // right
    FindPath(row + 1, col, 'D'); // down

    // Mark back the current cell as free
    lab[row, col] = ' ';
  }

  // Remove the last direction from the path
  position--;
}

static void PrintPath(char[] path, int startPos, int endPos)
{
  Console.Write("Found path to the exit: ");
  for (int pos = startPos; pos <= endPos; pos++)
  {
    Console.Write(path[pos]);
  }
  
  Console.WriteLine();
}

static void Main()
{
  FindPath(0, 0, 'S');
}

//  Found path to the exit: RRDDLLDDRRRRRR
//  Found path to the exit: RRDDRRUURRDDDD
//  Found path to the exit: RRDDRRRRDD

以上是关于csharp 使用递归实现解决方案以在迷宫中查找路径的示例。从C#h的计算机编程基础知识出发的主要内容,如果未能解决你的问题,请参考以下文章

为迷宫实现树以在 DFS、BFS 中使用

Java非递归实现迷宫问题

在 C++ 中使用递归回溯迷宫

DFS(递归)模板 ——八皇后和迷宫寻找出路

(c++)迷宫自动寻路-队列-广度优先算法-附带寻路打印动画

canvas——随机生成迷宫