Advertisement
osence

lights

Apr 28th, 2020
2,123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
QML 2.48 KB | None | 0 0
  1. QVector<bool> Helper::light(QVector<int> bricks)
  2. {
  3.   // Храним является ли клетка зажженой
  4.   QVector<bool> lights;
  5.   // Первая клетка всегда горит
  6.   lights.push_back(true);
  7.   // Обнуляем, кроме первой
  8.   for (int i = 1; i < 100; i++) {
  9.       lights.push_back(false);
  10.   }
  11.   // Индекс текущей клетки
  12.   int index = 0;
  13.   // Храним путь назад
  14.   QVector<int> backway;
  15.   while(true){
  16.       // Если из текущей клетки, можно пойти направо, то зажигаем клетку справа и переходим
  17.       if ( (bricks.at(index) & 1) && (index % 10 != 9) && (lights[index + 1] != true) && (bricks.at(index + 1) & 4) ) {
  18.           backway.push_back(index);
  19.           index += 1;
  20.           lights[index] = true;
  21.           continue;
  22.       }
  23.       // Если из текущей клетки, можно пойти налево, то зажигаем клетку слева и переходим
  24.       if ( (bricks.at(index) & 2) && (index / 10 != 9) && (lights[index + 10] != true) && (bricks.at(index + 10) & 8) ) {
  25.           backway.push_back(index);
  26.           index += 10;
  27.           lights[index] = true;
  28.           continue;
  29.       }
  30.       // Если из текущей клетки, можно пойти вниз, то зажигаем клетку снизу и переходим
  31.       if ( (bricks.at(index) & 4) && (index % 10 != 0) && (lights[index - 1] != true) && (bricks.at(index - 1) & 1) ) {
  32.           backway.push_back(index);
  33.           index -= 1;
  34.           lights[index] = true;
  35.           continue;
  36.       }
  37.       // Если из текущей клетки, можно пойти вверх, то зажигаем клетку сверху и переходим
  38.       if ( (bricks.at(index) & 8) && (index /10 != 0) && (lights[index - 10] != true) && (bricks.at(index - 10) & 2) ) {
  39.           backway.push_back(index);
  40.           index -= 10;
  41.           lights[index] = true;
  42.           continue;
  43.       }
  44.       // Если из текущей клетки нет незажженных путей, то идем обратно
  45.       // Если пути назад закончились, то выходим из цикла
  46.       if (!backway.empty()){
  47.           index = backway.back();
  48.           backway.pop_back();
  49.           continue;
  50.       }
  51.       break;
  52.   }
  53.  
  54.   // Set lights to some maze bricks
  55.  
  56.   return lights;
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement