【发布时间】:2019-03-02 16:14:09
【问题描述】:
我将 Java 代码翻译成 R。我需要检查是否所有行都正确翻译。
某些部分很可能是正确的,因为我运行它并且 R 说:
错误:C 堆栈使用 7970192 太接近限制。
我不确定哪个部分出错了,因为当我编译它时,它不会对所有行显示任何错误,除非我尝试运行它
原始 Java 代码:
public static void printQueens(int[] q) {
int n = q.length;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (q[i] == j) StdOut.print("Q ");
else StdOut.print("* ");
}
StdOut.println();
}
StdOut.println();
}
/***************************************************************************/
public static void enumerate(int n) {
int[] a = new int[n];
enumerate(a, 0);
}
public static void enumerate(int[] q, int k) {
int n = q.length;
if (k == n) printQueens(q);
else {
for (int i = 0; i < n; i++) {
q[k] = i;
if (isConsistent(q, k)) enumerate(q, k+1);
}
}
}
public static void main(String[] args) {
int n = Integer.parseInt(args[0]);
enumerate(n);
}
}
R代码待修正
# Prints n-by-n placement of queens from permutation q
printQueens <- function(q) {
n = q.length
for(i in seq_len(n)) {
for(j in seq_len(n)) {
if(q[i] == j) print("Q ")
else{ print("* ")}
}
sep="/n"
}
sep="/n"
}
#Try all permutations using backtracking
enumerate <- function(q, k) {
n = q.length;
if(k == n) print(Queens(q))
else {
for(i in seq_len(n)) {
q[k] = i
if (isConsistent(q, k)) enumerate(q, k+1)
}
}
}
enumerate <- function(n) {
a = n
enumerate(a);
}
main <- function(args) {
n =args[0];
enumerate(n);
}
【问题讨论】:
-
我们似乎缺少
isConsistent()方法。 n-queens 问题 也是众所周知的。 en.wikipedia.org/wiki/Eight_queens_puzzle -
编辑有帮助,但错误是什么?
-
@EJoshuaS 错误是 enumerate(a, 0) 中的错误:找不到函数“enumerate”
-
@EJoshuaS 错误:意外的 'else' in:“ if(k == n) printQueens(q); else” ----------------- ---------k中的错误:找不到对象'k'
标签: java r backtracking callstack code-translation