SHARE
TWEET

Untitled

a guest Sep 30th, 2015 77 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "stdafx.h"
  2. #include "Labirint.h"
  3.  
  4. #include <conio.h>
  5. #include <iostream>
  6. #include <fstream>
  7.  
  8. using namespace std;
  9.  
  10. Labirint::Labirint()
  11. {
  12.         this->initData();
  13.         this->init();
  14. }
  15.  
  16. Labirint::~Labirint() {
  17.         cout << "By.." << endl;
  18. }
  19.  
  20. void Labirint::initData() {
  21.         ifstream ifs("data.txt");
  22.  
  23.         for (int i = 0; i < this->sizeRow; i++)
  24.         {
  25.                 for (int j = 0; j < this->sizeCol; j++)
  26.                 {
  27.                         ifs >> (unsigned char)this->map[i][j];
  28.                 }
  29.         }
  30. }
  31.  
  32. void Labirint::init() {
  33.         for (int i = 0; i < this->sizeRow; i++)
  34.                 for (int j = 0; j < this->sizeCol; j++)
  35.                         this->oke[i][j] = this->map[i][j];
  36.  
  37.         int a = 0,
  38.                 b = 0;
  39.         unsigned char n = 2;
  40.  
  41.         this->map[0][1] = 2;
  42.  
  43.         for (int i = 0; i < this->sizeRow; i++) {
  44.                 for (int j = 0; j < this->sizeCol; j++)
  45.                         cout << this->map[i][j] << " ";
  46.                 cout << endl;
  47.         }
  48.  
  49.         // работает пока flag == 1, tckb 0, то путь найден
  50.         // находит конечную точку
  51.         while (this->wave(n, a, b)) {
  52.                 n++;
  53.         }
  54.  
  55.         // если не найшло, то хер
  56.         if (a == 0 && b == 0)
  57.                 cout << endl << "Bad labirint." << endl;
  58.         //else cout << "(" << a << "," << b << ")" << endl;
  59.  
  60.         cout << endl << endl;
  61.  
  62.         this->oke[a][b] = '*';
  63.  
  64.         // походу присваивает правильному пути *
  65.         while (this->stepback(a, b)) {
  66.                 this->oke[a][b] = '*';
  67.                 //cout << "(" << a << "," << b << ")" << endl;
  68.         }
  69.  
  70.         // виводе пройдений лабіринт
  71.         for (int i = 0; i < this->sizeRow; i++) {
  72.                 for (int j = 0; j < this->sizeCol; j++)
  73.                         cout << this->oke[i][j] << " ";
  74.                 cout << endl;
  75.         }
  76.  
  77.         cout << endl << "LABIRINT COMPLETED" << endl;
  78.  
  79.         _getch();
  80. }
  81.  
  82. char Labirint::wave(unsigned char n, int &a, int &b) {
  83.         char flag = 0;
  84.  
  85.         for (int i = 0; i < this->sizeRow; i++) {
  86.                 for (int j = 0; j < 24; j++) {
  87.                         if (this->map[j][i] == n) {
  88.                                 // це все стіна
  89.                                 if (this->map[j + 1][i] == 0) {
  90.                                         this->map[j + 1][i] = n + 1;
  91.                                         flag = 1;
  92.                                 }
  93.                                 if (this->map[j - 1][i] == 0) {
  94.                                         this->map[j - 1][i] = n + 1;
  95.                                         flag = 1;
  96.                                 }
  97.                                 if (this->map[j][i + 1] == 0) {
  98.                                         this->map[j][i + 1] = n + 1;
  99.                                         flag = 1;
  100.                                 }
  101.                                 if (this->map[j][i - 1] == 0) {
  102.                                         this->map[j][i - 1] = n + 1;
  103.                                         flag = 1;
  104.                                 }
  105.  
  106.                                 // если на финише
  107.                                 if ((this->map[j + 1][i] == 'F')
  108.                                         || (this->map[j - 1][i] == 'F')
  109.                                         || (this->map[j][i + 1] == 'F')
  110.                                         || (this->map[j][i - 1] == 'F') ) {
  111.                                         a = j;
  112.                                         b = i;
  113.                                         flag = 0;
  114.                                 }
  115.                         }
  116.                 }
  117.         }
  118.  
  119.         return flag;
  120. }
  121.  
  122. char Labirint::stepback(int &x, int &y) {
  123.         if (this->map[x][y] == 2) //старт точка
  124.                 return 0;
  125.  
  126.         if (this->map[x + 1][y] < this->map[x][y] && this->map[x + 1][y] != 1) {
  127.                 x++;
  128.                 return 1;
  129.         }
  130.         if (this->map[x - 1][y] < this->map[x][y] && this->map[x - 1][y] != 1) {
  131.                 x--;
  132.                 return 1;
  133.         }
  134.         if (this->map[x][y + 1] < this->map[x][y] && this->map[x][y + 1] != 1) {
  135.                 y++;
  136.                 return 1;
  137.         }
  138.         if (this->map[x][y - 1] < this->map[x][y] && this->map[x][y - 1] != 1) {
  139.                 y--;
  140.                 return 1;
  141.         }
  142.  
  143.         return 0;
  144. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top