Как завершить этот цикл for, который вызывает функцию

У меня возникли проблемы при попытке продолжить выполнение определенного цикла for в проблеме 1D Queens.

Во-первых, я использовал выражения goto для всего. Теперь я пытаюсь избавиться от операторов goto, используя вместо этого функции. В конце концов я избавлюсь от всех них, но сначала я сосредоточусь на NR (новая строка) и возврате, поскольку они предназначены для вызова друг друга.

У меня проблемы с циклом for, который проверяет, безопасна ли позиция для ферзя. Я отмечаю цикл for, который не завершается в комментариях.

//forward declarations
int backtrack (int board[], int& c_position);

//NR: q[c]++;
//if (q[c]==8) goto backtrack;

void NR (int board[], int& c_position) //new row
{
board[c_position]++;
if (board[c_position]==8) {backtrack(board, c_position);}
}

int backtrack (int board[], int& c_position)  // backtrack
{
c_position--;
if (c_position==-1) {system("PAUSE"); exit(1);}
NR(board, c_position);
}int main ()
{

int q[8] = {0};  //1D array, the board, all set to 0;
int c=0;
int count=0;NC: c++; //new column
if (c==8) goto print;
q[c]=-1;

NR(q, c);//test to see if position is safe
for (int i=0; i<c; i++) //this is the for loop I am having trouble with
{
if ( (q[i]==q[c]) || ((c-i)==abs(q[c]-q[i])) ) { NR(q, c); }
}

goto NC;

print: //printing the 1D board gives us a single line, where each number represents a row where a queen is
count++;
cout << count << endl;
for(int j = 0; j <= 7; j++)
{
cout << q[j] << " ";
}
cout << endl;
backtrack(q, c);

system("PAUSE"); return 0;

}

-2

Решение

Вы проходите c посредством ссылки на функцию, которая передает ее другой функции, которая уменьшает ее.

Это, кажется, мешает вашему (внешнему gotoна основе) попытка цикла увеличить его.

Во всяком случае, это то, что я бы посмотрел более внимательно.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]