C++ vs 调试 代码跳转异常

leetcode的n皇后,自己写的代码
打断点:

img

第一次继续后:

img

第二次继续后:

img

为什么直接跳到return了啊?我前面的函数怎么不先执行啊?

第三次继续后:

img

为什么会是return后才跳到这里执行?

main函数应该没有问题:
就两句 int main(){Solution nq;nq.solveNQueens(4);}

leetcode也能ac啊?

img

这个先return再跳到上面超出我的认知了

(由于不能发视频,但是这里的顺序真的不是我故意弄反,它就是这样的,为什么啊?)

基于new bing部分指引作答:
下面是答案你可以参考下
解决 N 皇后问题是一个经典的回溯算法问题。下面是一个使用 C++ 实现 N 皇后问题的示例代码:

#include <iostream>
#include <vector>

using namespace std;

bool isValid(vector<int>& queens, int row, int col) {
    for (int i = 0; i < row; ++i) {
        // 检查是否同列或同对角线上有皇后
        if (queens[i] == col || abs(queens[i] - col) == abs(i - row)) {
            return false;
        }
    }
    return true;
}

void solveNQueens(int n, int row, vector<int>& queens, vector<vector<string>>& result) {
    if (row == n) {
        // 生成结果
        vector<string> solution(n, string(n, '.'));
        for (int i = 0; i < n; ++i) {
            solution[i][queens[i]] = 'Q';
        }
        result.push_back(solution);
        return;
    }

    for (int col = 0; col < n; ++col) {
        if (isValid(queens, row, col)) {
            queens[row] = col;
            solveNQueens(n, row + 1, queens, result);
        }
    }
}

vector<vector<string>> solveNQueens(int n) {
    vector<vector<string>> result;
    vector<int> queens(n, -1);
    solveNQueens(n, 0, queens, result);
    return result;
}

int main() {
    int n = 4;
    vector<vector<string>> result = solveNQueens(n);
    
    for (const auto& solution : result) {
        for (const auto& row : solution) {
            cout << row << endl;
        }
        cout << "=========" << endl;
    }
    
    return 0;
}

上面的代码使用回溯算法解决了 N 皇后问题。在 solveNQueens 函数中,通过递归实现回溯搜索。isValid 函数用于检查当前位置是否可以放置皇后。最后,将符合要求的结果存储在 result 变量中并返回。

您可以根据具体需求修改变量 n 的值来计算不同规模的 N 皇后问题。运行程序后,程序将打印出所有的解法,每个解法以二维字符矩阵的形式展示,其中 'Q' 表示皇后的位置,'.' 表示空位。

请注意,对于较大的 n 值,N 皇后问题可能会有很多解,输出结果可能会非常庞大。如果需要限制输出数量,您可以在找到足够数量的解后提前终止搜索。