所以这个问题要求打印出在一个mxn网格中从(1,1)到(M,N)的所有路径,以及相同路径的总数。
把M和N都作为输入。M和N是矩形板上的行数和列数。我们的球员从左上角开始,必须到达右下角。在一次移动中,玩家可以水平移动一步(右)或垂直移动一步(下)或斜向移动一步(东南)。
>
编写一个递归函数,返回玩家可以跨板旅行的不同方式的计数。打印返回的值。
编写一个递归函数,打印所有有效路径的移动(void是函数的返回类型)。
Input:
3 3
Output:
VVHH VHVH VHHV VHD VDH HVVH HVHV HVD HHVV HDV DVH DHV DD
13
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
我不明白为什么在我们已经处于董事会最底层的情况下,有返回声明会有不同。
欢迎任何解释。
到达单元格后,您无需对其进行标记。因为只要你向右,向下或向右,你永远不会到达同一个细胞。因此,board[][]
是不必要的。
static int count = 0;
static void dfs(int m, int n, int i, int j, String path) {
if (i < 0 || i >= m || j < 0 || j >= n) {
return;
}
if (i == m - 1 && j == n - 1) {
count++;
System.out.print(path + " ");
return;
}
dfs(m, n, i + 1, j, path + "V");
dfs(m, n, i, j + 1, path + "H");
dfs(m, n, i + 1, j + 1, path + "D");
}
public static void main(String[] args) {
dfs(3, 3, 0, 0, "");
System.out.println();
System.out.println(count);
}
输出:
VVHH VHVH VHHV VHD VDH HVVH HVHV HVD HHVV HDV DVH DHV DD
13
问题在于这一行:
board[i][j] = 0;
如果返回时未重置电路板,则结果将不正确。如果您在if
语句中返回,则会发生这种情况,因为此行board[i][j]=0
行无法到达。
一个解决方案是将该行添加到
if
语句中:
if (i == m - 1 && j == n - 1) {
count++;
System.out.print(path + " ");
board[i][j] = 0;
return;
}
我有一个POJO类,用于使用Jackson进行反序列化。这个类包含所有类变量的默认构造函数、getter和setter方法<因为我需要一些关于POJO内容的高级逻辑,所以我添加了一个方法 但现在,我的单元测试在反序列化过程中失败,只有以下例外: 在我看来,Jackson似乎识别了一个get方法,并由此推断出,反序列化必须有一个类似的JSON属性 当我用@JsonIgnore注释方法时,测试成功了。
这将导致以下生成错误: TaskExecutionException:任务“:App:TransformResourcesWithMergeJavaResforDebug”执行失败。在org.gradle.api.internal.tasks.execution.executeActionStaskExecuter.java:103),在org.gradle.api.internal.tasks.
我正在尝试创建多个JavaFX应用程序,直到现在,当我尝试添加时,还没有遇到任何问题。我可以有一个全新的文件,并包括初始化的一行,这将导致异常。我在网上找遍了,什么也没有得到。仅仅添加TextField就会导致异常甚至出现在其他先前运行的k程序中。以下示例: 到目前为止我创建的程序:
我正在尝试在联接。但是对我来说,缺少一个功能。我为员工创建了,这些网格分为特定的部门,但有员工,这些员工仅在部门中。 不允许在一上添加。 所以结果应该是这样的: 即使< code>Vaadin不直接允许,有什么解决方案可以让我这样做吗? 因为如果我尝试过,它会引发异常
问题内容: 我正在用Java开发与MySQL db通信的应用程序,而在测试它时,我注意到在表中插入新行的代码引发了MySQLSyntaxError异常,因此我尝试使用MySQL Workbench执行相同的INSERT,而且有效。有问题的代码是这样的: 编辑:对不起,堆栈跟踪是: 问题答案: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorExcep
我不得不使用全局变量found来指示在哪里找到了一个和。返回语句始终未定义。 此外,如果在下面的if语句中使用return语句,代码将无法正常工作。 这不是问题的最佳解决方案,但这是我得到的工作版本。 返回语句之间的****,删除时代码工作,否则我要么得到false或未定义。我不明白这部分!为什么删除返回就能解决问题,我认为每个递归调用都必须用返回语句进行。 问题可能是由于多次呼叫造成的吗?我是不