Извините, мой основной язык не английский sh.
Я написал рекурсивную функцию для решения "проблемы с королевами".
int* Queen_Recursion(int n,int nowRow = 1, int nowColumn = 1, int* map = nullptr)
{
if (map == nullptr)
map = new int[n + 1]{0};
if (nowRow > n)
{
std::cout << "No." << ++map[0] << " Answer:";
for (int i = 1; i < n + 1; i++)
std::cout << '\t' << '(' << i << ", " << map[i] << ')';
std::cout << std::endl;
return Queen_Recursion(n, n, map[n] + 1, map);
}
else if (nowColumn > n)
{
if (nowRow == 1)
return map;
map[nowRow] = 0;
return Queen_Recursion(n, nowRow - 1, map[nowRow - 1] + 1, map);
}
bool CanPlace = true;
for (int i = 1; i < nowRow; i++)
if (map[i] == nowColumn || i - nowRow == map[i] - nowColumn || i - nowRow == nowColumn - map[i])
CanPlace = false;
if (CanPlace)
{
map[nowRow] = nowColumn;
return Queen_Recursion(n, nowRow + 1, 1, map);
}
else
return Queen_Recursion(n, nowRow, nowColumn + 1, map);
}
int main()
{
int* temp = Queen_Recursion(8);
delete temp;
return 0;
}
Когда я выбираю " «Отладка», он показывает мне только 5 ответов.
Когда я выбираю «Отпустить», он показывает мне 92 ответа. Конечно, это правильно.
Может кто-нибудь сказать мне причину?
Кстати, я попытался установить начальные значения «карты», и я думаю, в этой функции нет доступа к массиву вне границ.
Необработанное исключение при 0x00007FF73D68298D в 04-Some Recursion Problem.exe: 0xC00000FD: переполнение стека (параметры: 0x0000000000000001, 0x000000FA88903EC0). произошло