лабиринт с++

Компьютеры с++ иноформатика

Надо чтобы программа проходила лабиринт даже если его менять но если я меняю то она застопариваетья и начинает крутиться как сделать чтобы она искала другой путь при возврате а не крутилась на месте?

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <dos.h>
#define fmax 13
#define cmax 12

int i,j,c=0,f=0,k=0,cf=0,ff=0;
int z;
char plf[13][12]={ {"ІІІІІІІІІІІІ"},
{"ІІІІІ......І"},
{"І...І.ІІІІ.І"},
{"І.І.І....І.І"},
{"І.І.І.ІІ.І.І"},
{"#.І...ІІ.ІІІ"},
{"І.І.ІІІ....І"},
{"І....ІІ.ІІІІ"},
{"ІІІІ.ІІ.І..@"},
{"І.....І.І.ІІ"},
{"І.І.І.....ІІ"},
{"І.І...ІІІІІІ"},
{"ІІІІІІІІІІІІ"}};

void muestra ();
void cor();
void retorno ();
void reviso();


void main ()
{

for (i=0; i<fmax; i++)
for (j=0; j<cmax; j++)
if (plf[i][j]=='#')
{
c=i; f=j; break;
}

for (i=0; i<fmax; i++)
for (j=0; j<cmax; j++)
if (plf[i][j]=='@')
{
cf=i; ff=j; break;
}
clrscr ();
cor ();
getch ();
}

void muestra()
{
clrscr();
int x=1,y=1;
for (i=0; i<fmax; i++)
{
for (j=0; j<cmax; j++)
{
gotoxy (x,y); printf ("%c",plf[i][j]);
x++;
}
y++; x=1;
}
}


void cor ()
{
muestra ();
do
{
muestra();
plf[c][f]=',';
if(plf[c][f+1]=='.')
{
f++;
plf[c][f]='*';
gotoxy(6,21);printf("si");
}
else
{
if(plf[c-1][f]=='.')
{
c--;
plf[c][f]='*';
gotoxy(6,21);printf("no");
}
else
{
if(plf[c][f-1]=='.')
{
f--;
plf[c][f]='*';
gotoxy(6,21);printf("da");
}
else
{
if(plf[c+1][f]=='.')
{
c++;
plf[c][f]='*';
gotoxy(6,21);printf("ne");
}
else
retorno();
}

}
}

if(c==cf&&(f+1)==ff)
{
plf[c][f]='*';
muestra();
gotoxy(5,22);printf("win");
k=1;break;
}
else
{
gotoxy(5,20);scanf("%d",&k);
}
}
while (k!=1);
}

void reviso()
{
if(plf[c][f+1]=='.')
{
cor();
}
else
{
if(plf[c-1][f]=='.')
{
cor();
}
else
{
if(plf[c][f-1]=='.')
{
cor();
}
else
{
if(plf[c+1][f]=='.')
{
cor();
}
}
}
}
}

void retorno()
{
muestra();
if(plf[c][f-1]==',')
{
f--;
gotoxy(6,21);printf("ri");
plf[c][f]=',';
reviso();
}
else
{
if(plf[c+1][f]==',')
{
c++;
gotoxy(6,21);printf("ro");
plf[c][f]=',';
reviso();
}
else
{
if(plf[c][f+1]==',')
{
f++;
gotoxy(6,21);printf("ra");
plf[c][f]=',';
reviso();
}
else
{
if(plf[c-1][f]==',')
{
c++;
gotoxy(6,21);printf("re");
plf[c][f]=',';
reviso();
}
}
}
}
plf[c][f]='*';
}


Примечание:
" http://www.mediafire.com/?wwn6hqy3jsg31a4 "

Примечание:
ммм вроде все заставил проверку просто круться по всему лабиринту пока не дойдет до конца (если он конечно есть)

П.С. рамка и так из препядствий сосотоит просто там 2 разные препятсвия один который обозначает старт другой финиш
всеравно спасибо..
Ответы:
нужно всегда правой рукой косаться стены. это известное правило, но есть несколько лабиринтов в которых это, вроде, не работает.
Загрузи код на какой-нибудь ресурс и дайте ссылку. Разбирать это - ....
>>но если я меняю то она застопариваетья и начинает крутиться
1)Функция возврата должна быть рекурсивной.
2) Рамка лабиринта должна состоять из препятствий.


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.