我是否正确执行了此程序?

时间:2011-07-14 03:36:39

标签: c++ variable-assignment

作业是完成带有回溯的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;
}

2 个答案:

答案 0 :(得分:6)

嗯,不。

  • 一切都是一大功能;它应该被分解为小功能
  • 该程序 - 与所有程序一样 - 应该是自我测试。如果程序有效,则应该有一个返回true的函数,如果没有,则返回false
  • 您正在使用单字符变量名称;变量应该有有意义的名称。
  • 你在每个级别写cout;你应该进行计算,返回结果,然后(可选)将结果打印到cout。
  • 您使用的是goto,通常是ConsideredHarmful。你正在使用它很多,它总是被认为是有害的。

答案 1 :(得分:3)

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

所以正确地缩进程序,声明(和init)变量使用它们,并停止使用goto语句。如果你想从for循环中提前拯救,那就是break。 (或者更好的是,在单独的函数中编写循环代码并使用早期返回!)。