【发布时间】:2022-07-17 13:19:41
【问题描述】:
所以问题要求在 M X N 网格中打印从 (1,1) 到 (M,N) 的所有路径以及相同路径的总数。
问题陈述
将 M 和 N 作为输入,都是数字。 M 和 N 是矩形板上的行数和列数。我们的玩家从棋盘的左上角开始,必须到达右下角。在一次移动中,玩家可以水平移动 1 步(右)或垂直移动 1 步(下)或对角线移动 1 步(东南)。
-
编写一个递归函数,返回玩家可以在棋盘上移动的不同方式的计数。打印返回的值。
-
编写一个递归函数,打印所有有效路径的移动(void 是函数的返回类型)。
预期输入/输出:
Input:
3 3
Output:
VVHH VHVH VHHV VHD VDH HVVH HVHV HVD HHVV HDV DVH DHV DD
13
我的 JAVA 解决方案
import java.util.*;
public class Main {
static int count = 0;
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int n = sc.nextInt();
dfs(m, n, 0, 0, new int[m][n], "");
System.out.print("\n" + count);
sc.close();
}
static void dfs(int m, int n, int i, int j, int[][] board, String path) {
if (i < 0 || i >= m || j < 0 || j >= n || board[i][j] == 1) {
return;
}
board[i][j] = 1;
if (i == m - 1 && j == n - 1) {
count++;
System.out.print(path + " ");
return; // this line when included does cause problem
}
dfs(m, n, i + 1, j, board, path + "V");
dfs(m, n, i, j + 1, board, path + "H");
dfs(m, n, i + 1, j + 1, board, path + "D");
board[i][j] = 0;
}
}
但是当我包含 return 语句时,输出是:
Input:
3 3
Output:
VVHH
1
我不明白为什么当我们已经在板子的最右下方时有 return 语句会有所不同。
欢迎任何解释。
【问题讨论】:
标签: java recursion depth-first-search maze