Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2012, 16:08   #1
antragog
 
Регистрация: 17.03.2012
Сообщений: 5
По умолчанию Лабиринт рекурсией!

Как уже догадались мне требуется помощь с задачкой с названием "Путник в лабиринте".
В общем дал наш преподаватель нам на паре эту задачку, которую мы не смогли решить. Тогда он написал нам её решение доске и сказал, что она рабочая. Когда я пришел домой и ввел её в билдер, то понял что она с ошибками, которые мне не удалось исправить. На следующей паре я обнаружил, что не у кого из моих однокурсников она получилась. Я сказал нашему преподу что она не рабочая. Тогда он начал спорить со мной о её работоспособности. В итоге он разозлился и сказал, что если она у меня получится он ставит мне 2 за практику(( Я считаю он не прав!
НУ так ладно просто найти ошибке в задаче, так он мне её усложнил.
Он сказал чтоб я еще и нашёл самый короткий путь и вывести его. (ну я так думаю координаты шага или любой дрогой способ)
Ну а условие задачи звучит так: Задана матрица 12х12 Если 1-прохода нет, если 0 проход есть. Координаты входа и выхода задаются. Найти самый короткий маршрут.

Вот его вариант, введенный с фотографии доски:

Код:
#pragma hdrstop
#include <iostream.h>
#include <tchar.h>
#include <stdlib.h>

int a[12][12]={
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,1,0,1,1,1,1,1},
{1,1,0,1,0,1,0,1,1,1,1,1},
{1,1,0,1,0,0,0,0,1,1,1,1},
{1,1,0,1,1,0,1,1,1,1,1,1},
{1,1,0,1,1,0,1,1,1,1,0,1},
{1,1,0,0,1,1,1,1,1,0,0,1},
{1,1,0,1,1,0,0,0,1,0,1,1},
{1,0,0,0,1,0,1,1,1,0,0,1},
{1,0,1,0,0,0,0,0,0,0,1,1},
{1,0,0,0,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1}
};

void Step(int x,int y)
{
	a[x][y]=1;
	if (x==fi&&y==fj)// делаем проверку не находится ли путник в точке выхода
	{
		cout<<"Yes"; // если проверка сработала выводи "Да"
		getchar(); // не понятная мне команда "1"
		exit(0);    // не понятная мне команда "2"
	}
 if (a[x-1][y]==0) Step (x-1,y);  // шаг вверх
 if (a[x][y+1]==0) Step (x,y+1);  // шаг в право
 if (a[x+1][y]==0) Step (x+1,y);  // шаг вниз
 if (a[x][y-1]==0) Step (x,y-1);  // шаг в лево
}
int main()
{
int si,sj,fi,fj; // si,sj - start i/j, fi,fj - finish i/j
cin>>si>>sj>>fi>>fj;
Step (si,sj);
cout<<"no";
getchar ();//  не понятная мне команда "1"
system("pause");
return 0;
}
В понедельник нужно уже сдать эту задачу, а сегодня уже суббота!!!
Пожалуйста помогите с рабочей версией, только не сильно заумной т.к. мне её ещё и объяснять её.

Последний раз редактировалось antragog; 17.03.2012 в 17:15.
antragog вне форума Ответить с цитированием
Старый 17.03.2012, 16:29   #2
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Во-первых, желательно было написать сюда ошибки, которая она вам выдает.
Во-вторых, проверьте, насколько внимательно вы списали с фотографии.
В-третьих, мало списать с доски, надо еще и головой пользоваться.

Почему тут if (x=fi&&y=fj) стоит знак присвоения вместо знака равенства?
Что это за конструкция if (a[x-1][y]==0 Step) (x-1,y);? Тут скобка должна быть в другом месте if (a[x-1][y]==0) Step(x-1,y);
Это пока что на первый взгляд. Ошибки-опечатки, которые вы сам должны были заметить, не пеняя на препода.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 17.03.2012, 17:15   #3
antragog
 
Регистрация: 17.03.2012
Сообщений: 5
По умолчанию

Он выводит ошибку в строке exit()
Голову я и так подключал. ЩАс я сохранил код который я передал, программа начала запускаться, но віводит "no"
Я бы хотел у вас узнать что это за не понятные команды, точнее как они действуют, exit() и getchar()

Последний раз редактировалось antragog; 17.03.2012 в 17:17.
antragog вне форума Ответить с цитированием
Старый 17.03.2012, 17:20   #4
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

exit() - выход из программы
getchar() - для того, чтобы консольное окно не закрылось. Ожидаание нажатия клавиши в данном контексте.

"no" будет выводить в любом случае.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 17.03.2012, 18:13   #5
antragog
 
Регистрация: 17.03.2012
Сообщений: 5
По умолчанию

Это я и так понял. Если бы знал решение проблемы, не обращался за помощью к вам - знатокам! Для этого я и создал эту тему, чтоб вы помогли мне с кодом.
antragog вне форума Ответить с цитированием
Старый 17.03.2012, 19:03   #6
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Если бы вы объяснили проблему, то вам бы кто-нибудь помог. Я вот до сих пор не поняла, в чем у вас проблема. Функции, которые вы просили, я описала. Что теперь не так?
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 17.03.2012, 19:49   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

По-моему в функцию как минимум координаты финиша должны передаваться, а не только старта.
Цитата:
если она у меня получится, он ставит мне 2 за практику
оО, так тогда зачем вы пытаетесь ее решить?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 17.03.2012 в 19:54.
Alex11223 вне форума Ответить с цитированием
Старый 17.03.2012, 22:51   #8
antragog
 
Регистрация: 17.03.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
По-моему в функцию как минимум координаты финиша должны передаваться, а не только старта.

оО, так тогда зачем вы пытаетесь ее решить?
Обидно. Так у меня стоит по программированию 5 да и задания по практике которое рассчитано на 5 недель я сделал за 1 неделю, но вот с этой задачей проблема, которую не получается решить самому. Задачу переделал. Теперь она рабочая. Остаётся вопрос в том как сделать чтобы программа искала самый короткий путь и потом вывела его (нет идей по воплощению)
Исходник моей задачи :
Код:
#include<iostream.h>
int a[12][12] = {
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,1,0,1,1,1,1,1},
{1,1,0,1,0,1,0,1,1,1,1,1},
{1,1,0,1,0,0,0,0,1,1,1,1},
{1,1,0,1,1,0,1,1,1,1,1,1},
{1,1,0,1,1,0,1,1,1,1,0,1},
{1,1,0,0,1,1,1,1,1,0,0,1},
{1,1,0,1,1,0,0,0,1,0,1,1},
{1,0,0,0,1,0,1,1,1,0,0,1},
{1,0,1,0,0,0,0,0,0,0,1,1},
{1,0,0,0,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1}
};
int sx, sy, fx, fy;
void Step(int x, int y) 
{
 a[x][y] = 1;
 if (x == fx && y == fy) 
     {
     cout « "yes"«"\n";
     system("pause");
     exit;
     }
  if (a[x - 1][y] == 0)
  Step(x - 1, y);
  if (a[x][y + 1] == 0)
  Step(x, y + 1);
  if (a[x + 1][y] == 0)
  Step(x + 1, y);
  if (a[x][y - 1] == 0)
  Step(x, y - 1);
}

int main() 
{
 cin » sx » sy » fx » fy;
 Step(sx, sy);
 cout « "no"«"\n";
 system("pause");
 return 0;
}
Прога работает 100%

Последний раз редактировалось ACE Valery; 18.03.2012 в 01:16.
antragog вне форума Ответить с цитированием
Старый 17.03.2012, 23:41   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Обидно. Так у меня стоит по программированию 5 да
Я про то, что написано, что он поставит тебе 2 если ты все-таки сможешь решить задачу, а это не логично.

Цитата:
Код:
int sx, sy, fx, fy;
void Step(int x, int y)
Лучше не глобальные переменные, а в функуцию аргументы добавить. Или первые 2 убрать тогда уж.
Цитата:
Остаётся вопрос в том как сделать чтобы программа искала самый короткий путь и потом вывела его (нет идей по воплощению)
А она не самый короткий ищет?
UPD: ой, она вообще не ищет, а только его существование.
Не знаю как это тут изменить, я A*/алгоритм Дийкстры и волновой алгоритм для этого использовал. Вот хорошая статья http://www.policyalmanac.org/games/a...torial_rus.htm, по первому могу на Паскале программу показать.

А отобразить просто: в массиве путь обозначить другими числами и вывести этот массив (только х и у не перепутай), можно цвет изменить еще.

И используйте тег [CODE] (значок # ) для сохранения форматирования и подсветки кода в сообщении. Кнопка Правка снизу справа.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 17.03.2012 в 23:51.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Лабиринт keng Помощь студентам 9 14.09.2011 06:34
Лабиринт. ValinRam Помощь студентам 1 01.05.2011 08:47
Лабиринт GBTA Общие вопросы C/C++ 2 08.07.2010 12:03
Лабиринт Claster Помощь студентам 1 02.03.2009 11:41