Задать вопрос
@bushmaks

Какое нужно условие цикла для выхода из лабиринта?

Здравствуйте, я написал программу для поиска выхода из лабириринта(Двумерный массив), но никак не могу придумать условие, для того, что бы при попаднии в координаты выхода(y=9, x=6) программа закачнивалась.
Код программы
#include "iostream"
#include "windows.h"

using namespace std;

int main()
{
	int labirint[10][10] =   //Сам лабиринт
	{ { 1,1,1,1,1,1,1,1,1,1 },
	{ 1,0,1,1,0,1,0,0,0,1 },
	{ 1,0,0,0,0,1,0,1,0,1 },
	{ 1,1,1,1,0,1,0,1,0,1 },
	{ 1,0,0,0,0,1,0,1,0,1 },
	{ 1,1,0,1,1,1,0,1,0,1 },
	{ 1,1,0,0,0,0,0,1,0,1 },
	{ 1,1,1,1,1,1,1,1,0,1 },
	{ 1,0,0,0,0,0,0,0,0,1 },
	{ 1,1,1,1,1,1,0,1,1,1 } };
	int direction = 1; //Направление робота
	int y = 0, x = 1; //Координаты робота

	while (1) {   //Цикл, из которого надо выйти при нахождении выхода

		Sleep(1000);
		system("cls");

		labirint[y][x] = 2;   //Указание робота

		for (int i = 0; i < 10; i++) {   //Вывод лабиринта в консоли
			for (int a = 0; a < 10; a++) {
				if (labirint[i][a] == 1) {
					printf("%c", char(219));
				}
				else if (labirint[i][a] == 2) {
					printf("%c", char(253));
				}
				else {
					cout << " ";
				}	
			}
			cout << endl;
		}

		labirint[y][x] = 0; //Очистка хвоста робота
		cout << y << "  " << x << endl;
		switch (direction) {
		case 1: //Вверх
			while (labirint[y][x - 1] == 1 && labirint[y + 1][x] == 0) {
				y++;
			}
			if (labirint[y][x - 1] == 0) {
				direction = 3;
				x--;
			}
			else {
				direction = 2;
			}
			break;
		case 2: //Налево
			while (labirint[y + 1][x] == 1 && labirint[y][x + 1] == 0) {
				x++;
			}
			if (labirint[y + 1][x] == 0) {
				direction = 1;
				y++;
			}
			else {
				direction = 4;
			}
			break;
		case 3: //Направо
			while (labirint[y - 1][x] == 1 && labirint[y][x - 1] == 0) {
				x--;
			}
			if (labirint[y - 1][x] == 0) {
				direction = 4;
				y--;
			}
			else {
				direction = 2;
			}
			break;
		case 4: //Вниз
			while (labirint[y][x + 1] == 1 && labirint[y - 1][x] == 0) {
				y--;
			}
			if (labirint[y][x + 1] == 0) {
				direction = 2;
				x++;
			}
			else {
				direction = 3;
			}
		}
	} 
	system("pause");
    return 0;
}


Алгоритм нахождения выхода построен на основе правила одной стороны.
Какое нужно условие для выхода из цикла?
  • Вопрос задан
  • 193 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
longclaps
@longclaps
Ты должен оказаться в точке на периметре - это множество точек с координатами {x:любой,y:0}, {x:любой,y:9},{x:0,y:любой}, {x:9,y:любой}.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы