【问题标题】:N-Queens problem. Returning array from functions c++N皇后问题。从函数c ++返回数组
【发布时间】:2020-04-05 06:50:28
【问题描述】:

在尝试解决 c++ 中的 n-queens 问题时。我遇到了这个错误,我会得到正确的答案,但是当返回数组指针时,我最终得到的是垃圾数字而不是我的答案。关于这一点的奇怪部分是我使用递归来解决问题,并且只有在使用递归时才会得到垃圾编号(即使它正确地通过了递归)。数组在返回之前是完全正确的。

int* Successor(int board[], int n) {
    bool currentlyLegal = isLegalPosition(board, n);
    int firstZero = -1;
    int templast;

    for(int i = 0; i < n; i++) {
        if(board[i] == 0) {
            firstZero = i;
            break;
        }
    }

    if(currentlyLegal) {
        if(firstZero != -1) {
            for(int i = 1; i < n; i++) {
                board[firstZero] = i;
                if(isLegalPosition(board, n) && i != lastNum) {
                    return board;
                }
            }
            lastNum = -1;
            board[firstZero - 1] = 0;
            Successor(board, n);
        } else {
            templast = board[n - 1];
            for(int i = board[n - 1]; i < n; i++) {
                board[n - 1] = i;
                if(isLegalPosition(board, n) && i != board[n-1] && i != lastNum) {
                    return board;
                }
            }
            lastNum = templast;
            board[n - 1] = 0;
            Successor(board, n);
        }
    } else {
        if(firstZero != -1) {
            if(firstZero != 0) {
                for(int i = board[firstZero - 1]; i < n; i++) {
                    board[firstZero - 1] = i;
                    if(isLegalPosition(board, n) && i != board[firstZero - 1]) {
                        return board;
                    }
                }
                lastNum = -1;
                board[firstZero - 1] = 0;
                Successor(board, n);
            } else {
                board[0] = 1;
                return board;
            }
        } else {
            templast = board[n - 1];
            for(int i = board[n - 1]; i < n; n++) {
                board[n - 1] = i;
                if(isLegalPosition(board, n) && i != board[n - 1] && i != templast) {
                    return board;
                }
            }
            lastNum = templast;
            board[n - 1] = 0;
            Successor(board, n);
        }
    }

}

【问题讨论】:

    标签: c++ arrays return n-queens


    【解决方案1】:

    您的递归调用不会返回任何内容。打开所有警告后,您应该会看到“并非所有控制路径都返回值”的信息。将递归调用更改为

    return Successor( board, n );
    

    【讨论】:

    • 然后我脑子里冒出一个问题。当函数唯一可以返回的东西是board时,他为什么需要返回值
    • 据我所知,它没有。可能是踏脚石?
    猜你喜欢
    • 2021-02-02
    • 1970-01-01
    • 2020-07-04
    • 2020-06-22
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    相关资源
    最近更新 更多