Восемь чисел в кресте - неправильный вывод имеет нули - PullRequest
0 голосов
/ 13 марта 2019

Хорошо, так что для моего назначения мне нужно 1-8 чисел в кресте.В массиве соседние поля не могут быть последовательными.Вывод должен быть Решение № 1

 53
2817
 64

Решение № 2

 64
2817
 53

Решение № 3

 35
7182
 46

Решение № 4

 46
7182
 35

Однако в моей программе у меня есть нули, и я не могу понять, где в моем алгоритме возникают 0.Я попытался выяснить это путем отладки программы, однако мне все еще нужно больше практики отладки программы.Может кто-нибудь дать мне указание, где найти проблему в моем коде.Мой код ниже:

#include <iostream>
#include <cmath>
using namespace std;
bool okay(int q[], int col) {
static int a[8][5] = { // Helper Array
 {-1},
 {0, -1},
 {0, 1, -1},
 {0, 2, -1},
 {1, 2, -1},
 {1, 2, 3, 4, -1},
 {2, 3, 5, -1},
 {4, 5, 6, -1}
};
for (int i = 0; i < col; i++){ //row check
    if (q[i] == q[col])
    return false;
}


for (int i = 0; a[col][i] != -1; i++){ //check if numbers are consecutive
    if (abs(q[col] - q[a[col][i]]) == 1)
     return false;
}
 return true;
}



void backtrack(int& c){ //
--c;
if (c < 0)
exit (1);
}

void print(int q[]){
static int solutions = 0;
cout << "Solution#" << ++solutions << "\n";
cout << " "  << q[1] << q[4] << "\n";
cout << q[0] << q[2] << q[5] << q[7] << "\n";
cout << " "  << q[3] << q[6] << "\n\n";
}

int main(){
int q[8];
int c = 0;
q[c] = 1; //place

while (true){ //backtrack will end loop once solution is found
    while (c >= 0){ //
        ++c;
        if (c == 8){ // if all solutions were found print
            print(q);
            backtrack(c);
        } 
        else {
            q[c] = 0;
        }
        while ( c >= 0){
            ++q[c];
            if (q[c] > 8){ //if no solutions were found in a row
                backtrack(c);
                continue;
            }
            else {
                if (okay(q, c)) { //if number is ok break and go to next col
                    break;
                }
            }
        }
    }
}

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...