У меня есть задание создать очень быструю программу nqueens. Пока что алгоритм Bruteforce и Backtrack работают, но я нашел программу на C, которая, кажется, быстрее. Теперь я попытался преобразовать его из C в Java, однако я не могу преобразовать указатели, поскольку я не понимаю, что происходит с указателями. Эти строки, которые должны быть преобразованы:Преобразование C-указателя в Java
Edit: Я обновил преобразования к тому, что я понял:
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' индекс. – nhahtdh
Я читал об этом, но я понятия не имею, что мне делать тогда :). Предположим, что pnStack имеет тип int: pnStack = aStack +1; Каков результат, который теперь сохраняется в pnStack? –
Нет, вы хотите, чтобы nIndex = 1 соответствовал pnStack = aStack + 1, конечно. –