Это обычная учебная программа и я за такой код бил бы по рукам. Нарекания к ней.
1. Одновременное пользование printf и cout. Впрочем, несмотря на глючность, printf — хорошая штука, я и сам сделал более мощный аналог.
2. Есть немного случаев, когда допустимы такие названия переменных/функций.
• для счётчика цикла (i, j, k для переменной, it, jt, kt для итератора, u, v, w для новой фичи Си++11 — того, на что итератор указывает);
• если мы преобразуем научную статью в код, и переменные так названы в статье.
3. Даже название Count слишком расплывчатое — лучше что-то вроде nFound.
UPD2. 4. Я бы переписал функцию P так, что for [0…горизонталь), при бое return false, цикл удался — return true.
5. В музей говнокода!
if (i == k)
return true;
else if (i != k)
return false;
else
return !true && !false;
Верно
return (i==k);
Программа проходится по 1-й горизонтали и ставит ферзя на каждую клетку. Если поместился — рекурсивно делает то же самое для 2-й горизонтали, если нет — значит, не повезло. Как только расчёт дойдёт до N-й горизонтали — мы нашли расположение ферзей, можно выводить.
UPD. Ну, допустим, я бы переписал 2-ю функцию так (не меняя порядок параметров).
void Backtracking(int currX, int &nFound, int boardSize, int queenY[])