非常に高速な nqueens プログラムを作成するという課題があります。これまでのところ、ブルートフォース アルゴリズムとバックトラックは機能していますが、より高速と思われる 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++ を学んだことがない理由です。
よろしく、デニス・フィッシャー