Форум программистов, компьютерный форум CyberForum.ru

Нужно исправить код в програме "выхода из лабиринта" - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Поменять порядок следования массива http://www.cyberforum.ru/cpp-beginners/thread404814.html
Подскажите, пожалуйста, как поменять порядок следования данного массива на обратный:gsorry: #include <iostream> using namespace std; int main() { const int n = 10; float a; int k, i; do {
C++ Простейшие классы Пожалуйста помогите решить: Составить описание класса для представления даты. Предусмотреть возможности установки даты и изменения ее отдельных полей (год, месяц, день) с проверкой допустимости вводимых значений. В случае недопустимых значений выбрасываются исключения. Создать методы изменения даты на заданное количество дней, месяцев и лет. Написать программу, демонстрирующую все... http://www.cyberforum.ru/cpp-beginners/thread404808.html
пожалуйста, помогите с программкой.. C++
В общем надо разработать программу реализации и исследованию свойств хэш-фунций. (алгоритм md5)
C++ Неправильно работает функция
Проблема заключается в том, что в случае, если пользователь вводит числа от 1 до 9 все работает правильно, а если от 10 и далее, то "Введите массу в кг" и "Введите конечную температуру" выводятся сразу, без паузы. Объясните пожалуйста в чем проблема. float cm() { float c; float m; float t2; float t1; char s; cout << "Введите вещество на английском языке \n"; cout << "1.Aluminium \n";
C++ Исследование алгоритмов (модель) http://www.cyberforum.ru/cpp-beginners/thread404803.html
Помогите решить задачку, наработок пока нету, с чего начать тоже не знаю... Исследование алгоритмов (модель) решения проблемы блокировок при доступе к базе данных 1. Исходные данные: • количество процессов, претендующих на ресурсы, равно М; • разрешается одновременное чтение всем процессам; • разрешается запись только для одного процесса; • при записи доступ...
C++ Не заходит в функцию В общем такая проблема: криво работает функция перебора по двумерному вектору, и я решил выводить вектор на экран. Написав функцию вывода, программа (даже на пошаговой обработке) не хочет выводить ветор. В чем проблема? #include <fstream> #include <vector> #include <iostream> std:: vector <std:: vector<char>> a; int force (int i, int j, int n); подробнее

Показать сообщение отдельно
mulekula
0 / 0 / 0
Регистрация: 31.10.2011
Сообщений: 12
11.12.2011, 22:28     Нужно исправить код в програме "выхода из лабиринта"
Есть написанная программа поиск кратчайшего пути к выходу из лабиринта на C ++
Вот код:
Код
#include <iostream.h>
#include <stdio.h>
#include <io.h>
 
#define MEN 2
#define LF 10
#define SPACE 32
#define ORIGINAL_MAZE 0
#define MAZE_WITH_PATH 1
 
struct Point
{
	int x;
	int y;
} exit;
 
int** maze;
int sizex = 0, sizey = 0;
int load_maze()
{
	int i, j, filesize = 0, x = 0, y = 0;
	char* cc;
	FILE *F;
	//Пытаемся открыть текстовой файл для чтения:
	F = fopen("maze.txt","rt");
	if( F==NULL )
		return 0;
	//Создаем массив, в который поместим байты из файлы:
	filesize = filelength(fileno(F));
	cc = new char[filesize];
	//Загружаем в массив байты из файла:
	for(i=0;i!=filesize;i++)
		cc[i] = getc(F);
	fclose(F);
	//Рассчитываем размеры матрицы лабиринта:
	i = 0;
	while(cc[i] != LF)
	{
		if(cc[i] != SPACE)
			sizex++;
		i++;
	}
	sizey = filesize/(sizex*2);
	//Теперь размер лабиринта известен, инициализируем матрицу:
	maze = new int*[sizey];
	while(y != sizey)
		maze[y++] = new int[sizex];
	//Заполняем матрицу лабиринта данными из файла
	i=0;
	for(y = 0;y!=sizey;y++)
	{
		for(j=0;j!=sizex;j++)
		{
			maze[y][x] = cc[i]-48;
			x++;
			i+=2;
		}
		x=0;
	}
	return 1;
}
 
int temp = MEN;
int check(int x, int y)
{
	int cnt = 0;
	if(x != 0 && maze[y][x-1] == 0)
	{
		maze[y][x-1] = temp+1;
		cnt++;
	}
	if(x != sizex-1 && maze[y][x+1] == 0)
	{
		maze[y][x+1] = temp+1;
		cnt++;
	}
	if(y != 0 && maze[y-1][x] == 0)
	{
		maze[y-1][x] = temp+1;
		cnt++;
	}
	if(y != sizey-1 && maze[y+1][x] == 0)
	{
		maze[y+1][x] = temp+1;
		cnt++;
	}
	return cnt;
}
 
int search_exit()
{
	int x, y;
	exit.x = 0;
	exit.y = 0;
	y = 0;
	for(x = 0; x!=sizex; x++)
		if(maze[y][x] == 0)
		{
			exit.x = x;
			exit.y = y;
			return 1;
		}
	y = sizey-1;
	for(x = 0; x!=sizex; x++)
		if(maze[y][x] == 0)
		{
			exit.x = x;
			exit.y = y;
			return 1;
		}
	x = 0;
	for(y = 0; y!=sizey; y++)
		if(maze[y][x] == 0)
		{
			exit.x = x;
			exit.y = y;
			return 1;
		}
	x = sizex-1;
	for(y = 0; y!=sizey; y++)
		if(maze[y][x] == 0)
		{
			exit.x = x;
			exit.y = y;
			return 1;
		}
	return 0;
}
 
void print_maze(char mode)
{
	int x,y;
	for(y = 0; y!=sizey; y++)
	{
		for(x = 0; x!=sizex; x++)
		{
			if(maze[y][x] == MEN)
				cout << "M" << "";
			else
			if(mode == 1 && maze[y][x] == 0)
				cout << "*" << "";
			else
			if(maze[y][x] > MEN)
				cout << "0" << "";
			else
				cout << maze[y][x] << "";
		}
		cout << endl;
	}
}
 
int main()
{
	int x, y, paths = 0, i = 1, steps, cnt = 0;
	if(load_maze() == 0)
	{
		cout << "File maze.txt not found." << endl;
		return 0;
	}
	//Вывод матрицы лабиринта в консоль:
	cout << "Labirint:\r\n" << "(" << sizex << "x" << sizey << ")\r\n" << endl;
	print_maze(ORIGINAL_MAZE);
	//Легенда:
	cout << "\r\nM - Chelovek\r\n1 - Stena\r\n0 - Prohod" << endl;
	//Если нет граничного элемента, равного нулю, то выхода из лабиринта нет
	if(search_exit() == 0)
	{
		cout << "\r\nVuhoda iz labirinta net." << endl;
		return 0;
	}
	cout << "\r\nKoordinatu Vuhoda:\r\nX = " << exit.x << "; Y = " << exit.y << "\r\n" << endl;
	//Ищем кратчайший путь к выходу из лабиринта:
	while(1)
	{
		//Проходим по очереди все элементы матрицы и смотрим соседние элементы тех элементов, которые равны temp
		for(y = 0; y!=sizey; y++)
		{
			for(x = 0; x!=sizex; x++)
			{
				if(maze[y][x] == temp)
					paths += check(x,y); //Смотрим соседей элемента y,x
			}
		}
		//paths равна нулю только если среди соседей элемента со значением temp нет ни одного
		//элемента со значением 0 => человек замурован, завершить поиск пути.
		if(paths == 0)
		{
			cout << "\r\nVuhoda iz labirinta net." << endl;
			return 0;
		}
 
		paths = 0;
		if(maze[exit.y][exit.x] == 0)
			temp++;
		else
			break;
	}
	//Путь к выходу длиной steps:
	steps = maze[exit.y][exit.x];
	maze[exit.y][exit.x] = 0;
	x = exit.x;
	y = exit.y;
	//Выделяем нулями пройденный путь:
	while(1)
	{
		if(x != 0 && maze[y][x-1] == steps-i)
		{
			if(maze[y][x-1] == 2)
				break;
			maze[y][x-1] = 0;
			x--;
		}
		if(x != sizex-1 && maze[y][x+1] == steps-i)
		{
			if(maze[y][x+1] == 2)
				break;
			maze[y][x+1] = 0;
			x++;
		}
		if(y != 0 && maze[y-1][x] == steps-i)
		{
			if(maze[y-1][x] == 2)
				break;
			maze[y-1][x] = 0;
			y--;
		}
		if(y != sizey-1 && maze[y+1][x] == steps-i)
		{
			if(maze[y+1][x] == 2)
				break;
			maze[y+1][x] = 0;
			y++;
		}
		i++;
	}
	cout << "\r\nSimvol '*' - proydennuy element:\r\n" << endl;
	print_maze(MAZE_WITH_PATH);
	cout << "\r\nLabirint proyden za " << steps - 2 << " hodov " << endl;
	return 1;
}

компилятор выдает такие ошибки:
Error 4 error C2228: left of '.x' must have class/struct/union 94 recurs
Error 5 error C2228: left of '.y' must have class/struct/union 95 recurs
Error 6 error C2228: left of '.x' must have class/struct/union 100 recurs
Error 7 error C2228: left of '.y' must have class/struct/union 101 recurs
Error 8 error C2228: left of '.x' must have class/struct/union 108 recurs
Error 9 error C2228: left of '.y' must have class/struct/union 109 recurs
Error 10 error C2228: left of '.x' must have class/struct/union 116 recurs
Error 11 error C2228: left of '.y' must have class/struct/union 117 recurs
Error 12 error C2228: left of '.x' must have class/struct/union 124 recurs
Error 13 error C2228: left of '.y' must have class/struct/union 125 recurs
Error 14 error C2228: left of '.x' must have class/struct/union 172 recurs
Error 15 error C2228: left of '.y' must have class/struct/union 172 recurs
Error 16 error C2228: left of '.y' must have class/struct/union 194 recurs
Error 17 error C2228: left of '.x' must have class/struct/union 194 recurs
Error 18 error C2228: left of '.y' must have class/struct/union 200 recurs
Error 19 error C2228: left of '.x' must have class/struct/union 200 recurs
Error 20 error C2228: left of '.y' must have class/struct/union 201 recurs
Error 21 error C2228: left of '.x' must have class/struct/union 201 recurs
Error 22 error C2228: left of '.x' must have class/struct/union 202 recurs
Error 23 error C2228: left of '.y' must have class/struct/union 203 recurs

буду очень благодарен за помощь...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 22:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru