Witam. Mam prośbę. Na zadanie dostałam napisać program, który znajdzie wyjście z labiryntu i ma to być algorytm rekurencyjny z powrotami. Czy mógłby mi ktoś powiedzieć, jak poprawić ten kod (co dopisać w funkcji "Droga")?
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int Droga (string plansza[], int wspIx, int wspIy)//, /*int c, int e, int ruchy[][2], int u, int i)
{
int next;
if(plansza[wspIx + 1][wspIy] == ' ' && next == 0)
{
plansza[wspIx + 1][wspIy] = 1;
if(!Droga(plansza, wspIx+1, wspIy))
{
next = 0;
plansza[wspIx+1][wspIy] = ' ';
}
else
{
Droga(plansza, wspIx+1, wspIy);
}
}
else if(plansza[wspIx - 1][wspIy] == ' ' && next == 0)
{
plansza[wspIx - 1][wspIy] = 1;
if(!Droga(plansza, wspIx-1, wspIy))
{
next = 0;
plansza[wspIx-1][wspIy] = ' ';
}
else
{
Droga(plansza, wspIx-1, wspIy);
//}
}
else if(plansza[wspIx][wspIy + 1] == ' ' && next == 0)
{
plansza[wspIx][wspIy + 1] = 1;
if(!Droga(plansza, wspIx, wspIy + 1))
{
next = 0;
plansza[wspIx][wspIy + 1] = ' ';
}
else
{
Droga(plansza, wspIx, wspIy + 1);
}
}
else if(plansza[wspIx][wspIy - 1] == ' ' && next == 0)
{
plansza[wspIx][wspIy - 1] = 1;
if(!Droga(plansza, wspIx, wspIy - 1))
{
next = 0;
plansza[wspIx][wspIy - 1] = ' ';
}
else
{
Droga(plansza, wspIx, wspIy - 1);
}
}
}
int main(int argc, char *argv[])
{
char* cstr, * str;
int i, j, k, l, m, o;
int c = 0; // "długość" labiryntu
int h = 0; // "szerokość" labiryntu
int ai, bi, cx, dx;
string t[400];
int ruchy[4][2];
string zapis;
string line;
string sciezka;
string t2 = " ";
int u; // "pole" labiryntu
int e;
cout<<"*** Witaj w programie labirynt solver 1.0! *** \n"<<endl;
cout<<"Podaj \230cie\276k\251 dost\251pu do pliku: ";
cin>>sciezka;
cout<<endl;
cstr = new char;
strcpy(cstr, sciezka.c_str()); // zamienia napis typu string na wskaYnik do tablicy char'ów
ifstream labirynt(cstr);
if (labirynt.is_open())
{
while (!labirynt.eof())
{
for(i = 0; i < 400; i++)
{
getline(labirynt, t[i]);
line = t[i];
if(!line.empty())
{
c++;
h = line.length();
}
}
cout<<c<<endl;
cout<<h<<endl;
for(j = 0; j < c; j++)
{
for(k = 0; k < h; k++)
{
if(t[j][k] == '\\' && t[j][k+1] == 'n')
{
cout<<endl;
}
else if(t[j][k] == '*' || t[j][k] == 'I' || t[j][k] == 'X' || t[j][k] == ' ')
{
cout<<t[j][k];
}
}
}
for(l = 0; l < c; l++)
{
for(m = 0; m < h; m++)
{
if(t[l][m] == 'I')
{
ai = l;
bi = m;
cout<<"I: "<<ai<<" "<<bi<<endl;
}
else if(t[l][m] == 'X')
{
cx = l;
dx = m;
cout<<"X: "<<cx<<" "<<dx<<endl;
}
}
}
e = h-3;
u = c*h - c*3;
cout<<u<<endl;
if(Droga(t, ai, bi)) //, c, e, ruchy, u, 1);
{
for (i = 0; i < c; i++)
{
for (j = 0; j < h; j++)
{
if(t[i][j] == '\\' && t[i][j+1] == 'n')
{
cout<<endl;
}
if (t[i][j] == 1)
{
cout<<"#";
}
else if(t[i][j] == '*' || t[i][j] == 'I' || t[i][j] == 'X' || t[i][j] == ' ')
{
cout<<t[i][j];
}
}
}
}
else
{
cout<<"Brak rozwi\245zania. "<<endl;
}
}
labirynt.close();
}
cout<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
Shalom