Advertisement
RadioNurshat

Number Snake

Oct 7th, 2020
971
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.02 KB | None | 0 0
  1.  
  2. #include <iostream>
  3. #include <vector>
  4. #include <stdlib.h>
  5. #include <ctime>
  6. using namespace std;
  7. //1 - вверх
  8. //2 - вправо
  9. //3 - вниз
  10. //4 - влево
  11. bool isEmpty(int direction, int n, int m, int x, int y,vector<vector<int>> field) {
  12.     switch (direction)
  13.     {
  14.     case 1:
  15.         return (y - 1 >= 1) && (field[y - 2][x - 1] == 0);
  16.         break;
  17.     case 2:
  18.         return (x + 1 <= m) && (field[y - 1][x] == 0);
  19.         break;
  20.     case 3:
  21.         return (y + 1 <= n) && (field[y][x - 1] == 0);
  22.         break;
  23.     case 4:
  24.         return (x - 1 >= 1) && (field[y - 1][x - 2] == 0);
  25.         break;
  26.     }
  27. }
  28. int newDirection(int direction) {
  29.         switch (direction)
  30.         {
  31.         case 1:
  32.             return 2;
  33.             break;
  34.         case 2:
  35.             return 3;
  36.             break;
  37.         case 3:
  38.             return 4;
  39.             break;
  40.         case 4:
  41.             return 1;
  42.             break;
  43.         }
  44.     }
  45.  
  46. int main()
  47. {
  48.     srand(time(NULL));
  49.     int n;
  50.     int m;
  51.     cin >> n;
  52.     cin >> m;
  53.     int number = 1;
  54.     int direction = 2;
  55.     vector <vector<int>> field;
  56.     field.resize(n);
  57.     for (int i = 0; i < n; i++) {
  58.         field[i].resize(m);
  59.         for (int j = 0; j < m; j++) {
  60.             field[i][j] = 0;
  61.         }
  62.     }
  63.     int x = (rand() % (m - 1)) + 1;
  64.     int y = (rand() % (n - 1)) + 1;
  65.  
  66.     while (number <= n * m) {
  67.         field[y-1][x-1] = number;
  68.         if (!isEmpty(direction, n, m, x, y, field)) {
  69.             direction = newDirection(direction);  
  70.         }
  71.         switch (direction) {
  72.         case 1:
  73.             y--;
  74.             break;
  75.         case 2:
  76.             x++;
  77.             break;
  78.         case 3:
  79.             y++;
  80.             break;
  81.         case 4:
  82.             x--;
  83.             break;
  84.         }
  85.         number++;
  86.     }
  87.     for (int i = 0; i < n; i++) {
  88.         for (int j = 0; j < m; j++) {
  89.             cout << field[i][j] << ' ';
  90.         }
  91.         cout << endl;
  92.     }
  93.     system("pause");
  94.    
  95. }
  96.  
  97.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement