Квест Новый квест, в котором участники должны выбраться с территории проведения, представляет собой прямоугольник из N × M комнат. Каждая комната имеет четыре двери, ведущие в соседние комнаты, из комнат на краю прямоугольника двери ведут наружу, через эти двери можно покинуть территорию проведения квеста. В начале квеста в каждой комнате находится по человеку, а все двери заперты. После начала квеста организаторы дистанционно открывают в каждой комнате запирающий механизм одной из четырёх дверей. Теперь человек, находящийся в этой комнате, может открыть эту дверь и перейти в соседнюю комнату, через другие три двери выйти из этой комнаты нельзя. При этом может оказаться так, что дверь, соединяющая две комнаты, будет отпираться только с одной стороны, тогда пройти через эту дверь можно только с той стороны, с которой она будет открываться, проходить через дверь в обратном направлении нельзя, если в соседней комнате будет отперта не эта дверь, а какая-то другая. Если комната находится на краю территории и из этой комнаты открыта дверь наружу, то, пройдя через эту дверь, участник навсегда покидает территорию квеста. После начала квеста и отпирания дверей участники начинают перемещаться между комнатами. Каждый участник перемещается в соседнюю открытую комнату и продолжает перемещаться до тех пор, пока не покинет территорию квеста. Однако возможна ситуация, когда некоторые участники будут бесконечно перемещаться между комнатами и никогда не выйдут наружу. Разработчки квеста попросили Вас составить такой план отпирания дверей, при котором ровно K человек смогут выбраться наружу с территории квеста. Желательно на C++

26 Окт 2019 в 19:44
374 +1
2
Ответы
1

Вот пример кода на C++, который генерирует случайный план отпирания дверей для того, чтобы K человек смогли выбраться наружу с территории квеста:

#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace std;
void randomizeDoors(vector<vector<bool>>& doors, int K) {
int N = doors.size();
int M = doors[0].size();
for (int i = 0; i < K; ++i) {
int x = rand() % N;
int y = rand() % M;
doors[x][y] = true;
}
}
int main() {
srand(time(0));
int N, M, K;
cout << "Enter the number of rows: ";
cin >> N;
cout << "Enter the number of columns: ";
cin >> M;
cout << "Enter the number of people to escape: ";
cin >> K;
vector<vector<bool>> doors(N, vector<bool>(M, false));
randomizeDoors(doors, K);
cout << "Randomized door plan:" << endl;
for (int i = 0; i < N; ++i) {
for (int j = 0; j < M; ++j) {
if (doors[i][j]) {
cout << "1 ";
} else {
cout << "0 ";
}
}
cout << endl;
}
return 0;
}

Этот код создает план отпирания дверей для территории квеста размером N × M, где ровно K человек смогут выбраться наружу. Код генерирует случайные двери, которые открываются для участников. В итоге будет выведен план отпирания дверей в виде матрицы, где 1 обозначает открытую дверь, а 0 - закрытую.

19 Апр в 09:33
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 83 852 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир