这个程序我做对了吗?

Did I do this program correctly?

本文关键字:程序      更新时间:2023-10-16

任务是用回溯法完成8皇后二维数组程序。

#include <iostream>
using namespace std;
int main() {
    int b[8][8] = { 0 };
    int r, c, i;
    int count = 1;
    b[0][0] = 1;
    c = 0;
nextColumn:
    c++;
    if (c == 8)
        goto print;
    r =- 1;
nextRow:
    r++;
    if (r == 8)
        goto back;
    for (i = 0; i < c; i++) {
        if (b[r][i] == 1)
            goto nextRow;
    }
    for (i = 0; (r - i) >= 0 && (c - i) >= 0; i++) {
        if (b[r - i][c - i] == 1)
            goto nextRow;
    }
    for (i = 0; (r + i) < 8 && (c - i) >= 0; i++) {
        if (b[r + i][c - i] == 1)
            goto nextRow;
    }
    b[r][c] = 1;
    goto nextColumn;
    c--;
    if (c == -1)
        return 0;
    r = 0;
    while (b[r][c] != 1)
        r++;
    b[r][c] = 0;
    goto nextRow;
    cout << endl;
    cout << "Result No." << count << endl;
    cout << endl;
    for (r = 0; r < 8; r++){
        for (int c = 0; c < 8; c++){
            cout << b [r][c];
        }
        cout << endl;
    }
    count++;
    goto back;
}

不。

  • 一切都是一个大功能;它应该被分解成小函数
  • 程序——像所有程序一样——应该是自我测试的。应该有一个函数,如果程序工作,返回true,如果没有返回false
  • 你正在使用单字符变量名;变量名应该有意义。
  • 你在给每一个级别的人写信;你应该执行计算,返回结果,然后(可选)将结果打印到cout。
  • 您正在使用goto,这通常被认为是有害的。而且你经常使用,这一直被认为是有害的。

如果你关心你的程序是否正确,首先要确保它是可读的。

因此正确缩进程序,在使用变量的地方声明(并初始化)变量,并停止使用goto语句。如果你想从for循环中提前退出,有break。(或者更好的做法是,在单独的函数中编写循环代码并使用早期返回!)