【发布时间】:2012-12-04 10:36:08
【问题描述】:
我的任务是创建一个非常快速的 nqueens 程序。到目前为止,Bruteforce 算法和 Backtrack 都在工作,但我发现了一个似乎更快的 C 程序。现在我尝试将它从 C 转换为 Java,但是我无法转换指针,因为我不了解指针发生了什么。 这些是必须转换的行:
编辑:我已将转换更新为我所理解的:
final int[] aStack = new int[MAX_BOARDSIZE * 2];
int bitfield; //That's what I've got so far
//Conversion 1:
register int* pnStack; -> int pnStack;
//Conversion 2:
pnStack = aStack + 1; -> pnStack = 1;
//Conversion 3:
pnStack = aStack + 1; -> pnStack = 1;
*pnStack++ = 0; -> aStack[pnStack++] = 0;
//Conversion 4:
bitfield = *--pnStack; -> bitfield = aStack[--pnStack];
//Conversion 5:
*pnStack++ = bitfield; -> aStack[pnStack++] = bitfield;
//Conversion 7:
pnStack == aStack -> pnStack == aStack[0] ???????
一个解决方案会很好,但如果你能解释一下这里发生了什么,我会尝试自己找到它。指针是我从未真正学习过 c 和 c++ 的原因。
问候, 丹尼斯·费舍尔
【问题讨论】:
-
使用
int索引而不是指针。 -
我已经读过这方面的内容,但我不知道我该怎么做:)。假设 pnStack 是 int 类型: pnStack = aStack +1;现在 pnStack 中保存的结果是什么?
-
不,你当然希望 nIndex = 1 对应于 pnStack = aStack + 1。