C++ 骑士';使用递归的s-tour

C++ 骑士';使用递归的s-tour,c++,recursion,C++,Recursion,现在我正处在骑士之旅的关键时刻,我只希望骑士能够移动,直到他不能再移动,然后停下来。代码在大多数情况下工作正常,但有时会打印出两个相同的数字 “我的移动”功能中的代码: board[0][0] = 1; if (row + 1 > -1 && row + 1 < 5 && col + 2 > -1 && col + 2 < 5 && board[row + 1][col + 2] == 0)

现在我正处在骑士之旅的关键时刻,我只希望骑士能够移动,直到他不能再移动,然后停下来。代码在大多数情况下工作正常,但有时会打印出两个相同的数字

“我的移动”功能中的代码:

    board[0][0] = 1;

    if (row + 1 > -1 && row + 1 < 5 && col + 2 > -1 && col + 2 < 5 && board[row + 1][col + 2] == 0) {
        move++;
        row += 1;
        col += 2;
        board[row][col] = move;
        printBoard();
        system("pause");
        moveKnight(row, col, move);
    }

    else if (row + 1 > -1 && row + 1 < 5 && col - 2 > -1 && col - 2 < 5 && board[row + 1][col - 2] == 0) {
        move++;
        row += 1;
        col -= 2;
        board[row][col] = move;
        printBoard();
        system("pause");
        moveKnight(row, col, move);
    }

    else if (row - 1 > -1 && row - 1 < 5 && col + 2 > -1 && col + 2 < 5 && board[row - 1][col + 2] == 0) {
        move++;
        row -= 1;
        col += 2;
        board[row][col] = move;
        printBoard();
        system("pause");
        moveKnight(row, col, move);
    }

    else if (row - 1 > -1 && row - 1 < 5 && col - 2 > -1 && col - 2 < 5 && board[row - 1][col - 2] == 0) {
        move++;
        row -= 1;
        col -= 2;
        board[row][col] = move;
        printBoard();
        system("pause");
        moveKnight(row, col, move);
    }

    else if (row - 2 > -1 && row - 2 < 5 && col + 1 > -1 && col + 1 < 5 && board[row - 2][col + 1] == 0) {
        move++;
        row -= 2;
        col += 1;
        board[row][col] = move;
        printBoard();
        system("pause");
        moveKnight(row, col, move);
    }

    else if (row - 2 > -1 && row - 2 < 5 && col - 1 > -1 && col - 1 < 5 && board[row - 2][col - 1] == 0) {
        move++;
        row -= 2;
        col -= 1;
        board[row][col] = move;
        printBoard();
        system("pause");
        moveKnight(row, col, move);
    }

    else if (row + 2 > -1 && row + 2 < 5 && col + 1 > -1 && col + 1 < 5 && board[row + 2][col + 1] == 0) {
        move++;
        row += 2;
        col += 1;
        board[row][col] = move;
        printBoard();
        system("pause");
        moveKnight(row, col, move);
    }

    else if (row + 2 > -1 && row + 2 < 5 && col - 1 > -1 && col - 1 < 5 && board[row + 2][col - 1] == 0) {
        move++;
        row += 2;
        col -= 1;
        board[row][col] = move;
        printBoard();
        system("pause");
        moveKnight(row, col, move);
    }
}
void printBoard() {
    cout << endl;
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5; j++) {
            cout << setw(3) << board[i][j];
        }
            cout << endl;
    }

}
打印板功能:

    board[0][0] = 1;

    if (row + 1 > -1 && row + 1 < 5 && col + 2 > -1 && col + 2 < 5 && board[row + 1][col + 2] == 0) {
        move++;
        row += 1;
        col += 2;
        board[row][col] = move;
        printBoard();
        system("pause");
        moveKnight(row, col, move);
    }

    else if (row + 1 > -1 && row + 1 < 5 && col - 2 > -1 && col - 2 < 5 && board[row + 1][col - 2] == 0) {
        move++;
        row += 1;
        col -= 2;
        board[row][col] = move;
        printBoard();
        system("pause");
        moveKnight(row, col, move);
    }

    else if (row - 1 > -1 && row - 1 < 5 && col + 2 > -1 && col + 2 < 5 && board[row - 1][col + 2] == 0) {
        move++;
        row -= 1;
        col += 2;
        board[row][col] = move;
        printBoard();
        system("pause");
        moveKnight(row, col, move);
    }

    else if (row - 1 > -1 && row - 1 < 5 && col - 2 > -1 && col - 2 < 5 && board[row - 1][col - 2] == 0) {
        move++;
        row -= 1;
        col -= 2;
        board[row][col] = move;
        printBoard();
        system("pause");
        moveKnight(row, col, move);
    }

    else if (row - 2 > -1 && row - 2 < 5 && col + 1 > -1 && col + 1 < 5 && board[row - 2][col + 1] == 0) {
        move++;
        row -= 2;
        col += 1;
        board[row][col] = move;
        printBoard();
        system("pause");
        moveKnight(row, col, move);
    }

    else if (row - 2 > -1 && row - 2 < 5 && col - 1 > -1 && col - 1 < 5 && board[row - 2][col - 1] == 0) {
        move++;
        row -= 2;
        col -= 1;
        board[row][col] = move;
        printBoard();
        system("pause");
        moveKnight(row, col, move);
    }

    else if (row + 2 > -1 && row + 2 < 5 && col + 1 > -1 && col + 1 < 5 && board[row + 2][col + 1] == 0) {
        move++;
        row += 2;
        col += 1;
        board[row][col] = move;
        printBoard();
        system("pause");
        moveKnight(row, col, move);
    }

    else if (row + 2 > -1 && row + 2 < 5 && col - 1 > -1 && col - 1 < 5 && board[row + 2][col - 1] == 0) {
        move++;
        row += 2;
        col -= 1;
        board[row][col] = move;
        printBoard();
        system("pause");
        moveKnight(row, col, move);
    }
}
void printBoard() {
    cout << endl;
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5; j++) {
            cout << setw(3) << board[i][j];
        }
            cout << endl;
    }

}
void打印板(){
cout-1和col-2<5和board[row-1][col-2]==0){
move++;
行-=1;
col-=2;
板[行][列]=移动;
印制板();
系统(“暂停”);
移动骑士(行、列、移动);
}
else if(第2行>-1&&row-2<5&&col+1>-1&&col+1<5&&board[row-2][col+1]==0){
move++;
行-=2;
col+=1;
板[行][列]=移动;
印制板();
系统(“暂停”);
移动骑士(行、列、移动);
}
else if(行-2>-1&&row-2<5&&col-1>-1&&col-1<5&&board[row-2][col-1]==0){
move++;
行-=2;
col-=1;
板[行][列]=移动;
印制板();
系统(“暂停”);
移动骑士(行、列、移动);
}
否则如果(行+2>-1&&row+2<5&&col+1>-1&&col+1<5&&board[row+2][col+1]==0){
move++;
行+=2;
col+=1;
板[行][列]=移动;
印制板();
系统(“暂停”);
移动骑士(行、列、移动);
}
else if(行+2>-1&&row+2<5&&col-1>-1&&col-1<5&&board[row+2][col-1]==0){
move++;
行+=2;
col-=1;
板[行][列]=移动;
印制板();
系统(“暂停”);
移动骑士(行、列、移动);
}
}

尝试更换
int-board[4][4]
集成电路板[5][5]:-)

尝试更换
int-board[4][4]
集成电路板[5][5]:-)

必须在
ifs
的某个位置。请注意,第二次移动并不总是有效的(请看3秒和10秒)。我建议重构你的代码,以便更容易理解发生了什么。@code11我如何使它更容易理解?是的,第三步和第十步才是问题所在。我不知道为什么要打印两次欢迎来到Stack Overflow!听起来您可能需要学习如何使用调试器逐步完成代码。有了一个好的调试器,您可以逐行执行您的程序,并查看它偏离预期的地方。这是一个必要的工具,如果你要做任何编程。进一步阅读:@NathanOliver我尝试过使用调试器。我仍然找不到问题。您能给我们看看您的printBoard()函数吗?似乎重复值总是在写入行的最后一列时打印(然后下一行的第一列重复该值),对吗?所以这可能只是一个印刷问题……一定在
ifs
的某个地方。请注意,第二次移动并不总是有效的(请看3秒和10秒)。我建议重构你的代码,以便更容易理解发生了什么。@code11我如何使它更容易理解?是的,第三步和第十步才是问题所在。我不知道为什么要打印两次欢迎来到Stack Overflow!听起来您可能需要学习如何使用调试器逐步完成代码。有了一个好的调试器,您可以逐行执行您的程序,并查看它偏离预期的地方。这是一个必要的工具,如果你要做任何编程。进一步阅读:@NathanOliver我尝试过使用调试器。我仍然找不到问题。您能给我们看看您的printBoard()函数吗?似乎重复值总是在写入行的最后一列时打印(然后下一行的第一列重复该值),对吗?所以这可能只是一个印刷问题…谢谢你的帮助。我不敢相信事情一直都这么简单:)谢谢你的帮助。我不敢相信事情一直都这么简单:)