Функция завершается не дойдя до return с++
вот код программы, из книги олимпиадное программирование. Он должен решать задачу о количестве способов разместить n ферзей на доске n*n чтобы они не били друг друга (перебор с возвратом) суть в том что код ничего не выводит хотя должен вывести ans; код:
#include <iostream>
#include <vector>
using namespace std;
const int n = 4;
int col[n]; int diag1[n]; int diag2[n];
int ans = 0;
void search(int y) {
if (y == n) {
ans++;
cout << ans<<endl;
return;
}
for (int x = 0; x < n; x++) {
if (col[x] || diag1[x + y] || diag2[x - y + n - 1])continue;
col[x] = diag1[x + y] = diag2[x - y + n - 1] = 1;
search(y + 1);
col[x] = diag1[x + y] = diag2[x - y + n - 1] = 0;
}
}
int main() {
search(0);
return 0;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
В книге у вас даны слишком мелкие массивы для диагоналей. Надо
int diag1[2*n-1]; int diag2[2*n-1];
(ну сами посчитайте число диагоналей). Вот они у вас и перезаписываются...
Ну, и выводить ans нужно не в search, а по окончании.
Вот работающая программа - https://ideone.com/J47BYq
P.S. Скачал книгу - с нее обвинение снимается, там размер diag не указан, это уже чисто ваша вина...