我的任务是创建一个非常快速的 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++ 的原因。
问候,丹尼斯·菲舍尔