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