Я правильно сделал эту программу? - PullRequest
0 голосов
/ 14 июля 2011

Назначение - завершение программы двумерного массива 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 ]

6 голосов
/ 14 июля 2011

Ну, нет.

  • Все это одна большая функция;это должно быть разбито на маленькие функции
  • Программа, как и все программы, должна быть самопроверкой.Должна быть функция, которая возвращает true, если программа работала, и false, если она не работала.
  • Вы используете односимвольные имена переменных;переменные должны иметь осмысленные имена.
  • Вы пишете в cout на каждом уровне;Вы должны выполнять вычисления, возвращать результаты, а затем (необязательно) печатать результаты в cout.
  • Вы используете goto, который обычно считается вредным.И вы используете это много , что всегда считается вредным.
3 голосов
/ 14 июля 2011

Если вы хотите, чтобы ваша программа была правильной, сначала убедитесь, что она читаема.

Поэтому сделайте правильный отступ в программе, объявите (и init) переменные там, где вы их используете, и перестаньте использовать оператор goto.Есть break, если вы хотите выручить рано из цикла for.(Или лучше, написать код цикла в отдельной функции и использовать ранние возвраты!).

...