/* * labyrinth.cpp * * Created on: 10.01.2013 * Author: trifon */ #include using namespace std; const int MAX = 10; char l[MAX][MAX]; int width, height; int step; void readLabyrinth() { // въвеждаме широчина и височина на лабиринта cin >> width >> height; // "изчистваме" новия ред cin.getline(l[0], 1); // въвеждаме лабиринта ред по ред for(int i = 0; i < height; i++) // оставяме място за символа за край на низ cin.getline(l[i], width + 1); } void printLabyrinth() { for(int i = 0; i < height; i++) cout << l[i] << endl; } void findStartingPosition(int& x, int& y) { for(int i = 0; i < height; i++) for(int j = 0; j < width; j++) if (l[i][j] == '@') { x = i; y = j; return; } x = y = -1; } /* bool findPath(int x, int y) { if (x < 0 || x >= height || y < 0 || y >= width) return false; if (l[x][y] == '$') return true; if (l[x][y] != '_' && l[x][y] != '@') return false; l[x][y] = (step % 10) + '0'; step++; // нагоре if (findPath(x - 1, y)) return true; // надолу if (findPath(x + 1, y)) return true; // наляво if (findPath(x, y - 1)) return true; // надясно if (findPath(x, y + 1)) return true; return false; } */ bool findPath(int x, int y) { if (x < 0 || x >= height || y < 0 || y >= width) return false; if (l[x][y] == '$') return true; if (l[x][y] != '_' && l[x][y] != '@') return false; l[x][y] = (step % 10) + '0'; step++; // нагоре if (findPath(x - 1, y)) return true; // надолу if (findPath(x + 1, y)) return true; // наляво if (findPath(x, y - 1)) return true; // надясно if (findPath(x, y + 1)) return true; step--; l[x][y] = '.'; return false; } bool solveLabyrinth() { int x, y; findStartingPosition(x, y); cout << "Начална позиция: (" << x << ',' << y << ')' << endl; step = 0; return findPath(x, y); } int main() { readLabyrinth(); if (solveLabyrinth()) { cout << "Има път до съкровището!" << endl; /* cout << "Първият ред:"; cout << l[0]; cout << "Край на първия ред."; */ printLabyrinth(); } else cout << "Няма път до съкровището!"; return 0; }