Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- QVector<bool> Helper::light(QVector<int> bricks)
- {
- // Храним является ли клетка зажженой
- QVector<bool> lights;
- // Первая клетка всегда горит
- lights.push_back(true);
- // Обнуляем, кроме первой
- for (int i = 1; i < 100; i++) {
- lights.push_back(false);
- }
- // Индекс текущей клетки
- int index = 0;
- // Храним путь назад
- QVector<int> backway;
- while(true){
- // Если из текущей клетки, можно пойти направо, то зажигаем клетку справа и переходим
- if ( (bricks.at(index) & 1) && (index % 10 != 9) && (lights[index + 1] != true) && (bricks.at(index + 1) & 4) ) {
- backway.push_back(index);
- index += 1;
- lights[index] = true;
- continue;
- }
- // Если из текущей клетки, можно пойти налево, то зажигаем клетку слева и переходим
- if ( (bricks.at(index) & 2) && (index / 10 != 9) && (lights[index + 10] != true) && (bricks.at(index + 10) & 8) ) {
- backway.push_back(index);
- index += 10;
- lights[index] = true;
- continue;
- }
- // Если из текущей клетки, можно пойти вниз, то зажигаем клетку снизу и переходим
- if ( (bricks.at(index) & 4) && (index % 10 != 0) && (lights[index - 1] != true) && (bricks.at(index - 1) & 1) ) {
- backway.push_back(index);
- index -= 1;
- lights[index] = true;
- continue;
- }
- // Если из текущей клетки, можно пойти вверх, то зажигаем клетку сверху и переходим
- if ( (bricks.at(index) & 8) && (index /10 != 0) && (lights[index - 10] != true) && (bricks.at(index - 10) & 2) ) {
- backway.push_back(index);
- index -= 10;
- lights[index] = true;
- continue;
- }
- // Если из текущей клетки нет незажженных путей, то идем обратно
- // Если пути назад закончились, то выходим из цикла
- if (!backway.empty()){
- index = backway.back();
- backway.pop_back();
- continue;
- }
- break;
- }
- // Set lights to some maze bricks
- return lights;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement