Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <random>
- #include <utility>
- #include <fstream>
- using namespace std;
- const int INF = 1e9;
- random_device rd;
- mt19937 eese(rd());
- int r = rand();
- int check(vector<vector<int>>& a, int x, int y) {
- int k = 0;
- if (a[y - 1][x - 2] == 0) {
- k++;
- }
- if (a[y + 1][x - 2] == 0) {
- k++;
- }
- if (a[y + 2][x - 1] == 0) {
- k++;
- }
- if (a[y + 2][x + 1] == 0) {
- k++;
- }
- if (a[y + 1][x + 2] == 0) {
- k++;
- }
- if (a[y - 1][x + 2] == 0) {
- k++;
- }
- if (a[y - 2][x + 1] == 0) {
- k++;
- }
- if (a[y - 2][x - 1] == 0) {
- k++;
- }
- return k;
- }
- void condition(vector<vector<int>>& a, int x, int y, int n, int m, vector<pair<int, int>>& z, int& mi) {
- if (x >= 2 && x <= m + 1 && y >= 2 && y <= n + 1 && a[y][x] == 0) {
- int ch = check(a, x, y);
- if (ch < mi) {
- mi = ch;
- z.clear();
- z.push_back({ y, x });
- }
- else if (ch == mi) {
- z.push_back({ y, x });
- }
- }
- }
- void passageway(vector<vector<int>>& a, int x, int y, int n, int m, vector<pair<int, int>>& z) {
- int mi = 10;
- z.clear();
- condition(a, x - 1, y - 2, n, m, z, mi);
- condition(a, x + 1, y - 2, n, m, z, mi);
- condition(a, x + 2, y - 1, n, m, z, mi);
- condition(a, x + 2, y + 1, n, m, z, mi);
- condition(a, x + 1, y + 2, n, m, z, mi);
- condition(a, x - 1, y + 2, n, m, z, mi);
- condition(a, x - 2, y + 1, n, m, z, mi);
- condition(a, x - 2, y - 1, n, m, z, mi);
- if (mi == 10) {
- return;
- }
- int random = rand() % z.size();
- a[z[random].first][z[random].second] = a[y][x] + 1;
- passageway(a, z[random].second, z[random].first, n, m, z);
- }
- int main()
- {
- ifstream in("input.txt");
- int n, m;
- in >> n >> m;
- int x, y;
- for (int i = 1; i <= n; ++i) {
- for (int l = 1; l <= m; ++l) {
- char c;
- in >> c;
- if (c == 'K') {
- x = l;
- y = i;
- }
- }
- }
- vector<vector<int>> a(n + 4, vector<int>(m + 4, 0));
- a[y + 1][x + 1] = 1;
- for (int i = 0; i < n + 4; ++i) {
- for (int l = 0; l < m + 4; ++l) {
- if (i < 2 || l < 2 || i >= n + 2 || l >= m + 2) {
- a[i][l] = INF;
- }
- }
- }
- vector<pair<int, int>> z;
- passageway(a, x + 1, y + 1, n, m, z);
- for (int i = 2; i < n + 2; ++i) {
- for (int l = 2; l < m + 2; ++l) {
- printf("%6d ", a[i][l]);
- }
- printf("/n");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement