Program znajdujący drogę wyjścia z labiryntu. Labirynt jest zapisany w pliku Labirynt.txt. Jest to kwadratowa tablica (20x20). Ściany mogą być zbudowane z jakiegokolwiek znaku z wyjątkiem "x" oraz spacji. "x" - oznacza wyjście.
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
#include <string.h>
const int szmax=20;
int ruch(char **tab,int i,int k);
void wypisz(char **tab);
using namespace std;
int main(int argc, char **argv) {
char **tab;
tab = new char*[szmax];
for (int q=0;q<szmax;q++) tab[q] = new char[szmax];
ifstream labirynt;
labirynt.open("LABIRYNT.TXT");
if (!labirynt)
{
cout << "\nBLAD OTWARCIA!\n";
system ("Pause");
return 1;
}
else
cout<<"gra labirynt\n\n";
for(int k=0; k<szmax&&labirynt; k++) //pobieranie znakow do tablicy
{
for(int i=0;i<szmax;i++)
{
labirynt.get(tab[i][k]);
cout<<tab[i][k];
}
labirynt.ignore(); //znak konca linii ignorowany
cout<<endl;
}
int x,y;
cout << endl;
cout << "podaj wspolrzedne\n";
cout << "x = ";
cin >> x;
cout << "y = ";
cin >> y;
if ((x>=szmax) || (y>=szmax) || (x<0) || (y<0) || (tab[x][y]!=' ')) {
cout<<"zle wspolrzedne"<<endl;
system("pause");
return 0;
}
if (ruch(tab, x, y)==0) cout << "Brak wyjscia" << endl;
else wypisz(tab);
for (int q=0;q<szmax;q++) delete tab[q];
delete tab;
system("pause");
return 0;
}
void wypisz(char **tab) {//wyswietlanie plusika
int i, j;
for (i=0;i<szmax;i++) {
for (j=0;j<szmax;j++) cout << tab[j][i];
}
}
int ruch(char **tab,int i,int k) //funkcja odnosnie poruszania sie
{
if (tab[i][k]=='x') return 1;
tab[i][k] = '+';
if (((i>0) && ((tab[i-1][k]==' ') || (tab[i-1][k]=='x'))) && (ruch(tab, i-1, k)==1)) return 1;
if (((i<szmax-1) && ((tab[i+1][k]==' ') || (tab[i+1][k]=='x'))) && (ruch(tab, i+1, k)==1)) return 1;
if (((k>0) && ((tab[i][k-1]==' ') || (tab[i][k-1]=='x'))) && (ruch(tab, i, k-1)==1)) return 1;
if (((k<szmax-1) && ((tab[i][k+1]==' ') || (tab[i][k+1]=='x'))) && (ruch(tab, i, k+1)==1)) return 1;
tab[i][k] = ' ';
return 0;}
oto labirynt zapisany w pliku "LABIRYNT.TXT":
AAAAAAAAAAAAAAAAAAAA
A A A A
A AA AAAAAA A A A A
AAA A AA A A A A A
A A AA AA A A A A A
A A A A A A
AA AAA AAAA AAAAAAAA
A A
AAA AAAAA AAAAAAA AA
A A A A A A A
A AAA A A AAAAA AAAA
A A A x
AAA A A AA AAAAAAAAA
A A A A
A AAA AAAAAA AAAAAAA
A AA AA A A A
AA AA A A A A A A
A AA AAAAAAAAAAAA A
AA A
AAAAAAAAAAAAAAAAAAAA
powinienem po skompilowaniiu otrzymac cos takiego:
AAAAAAAAAAAAAAAAAAAA
A++++ A A A
A AA+AAAAAA A A A A
AAA++A AA A A A A A
A A+AA AA A A A A A
A ++ A A A A A
AA+AAA AAAA AAAAAAAA
A ++++++++ A
AAA AAAAA+AAAAAAA AA
A A A A+A A A
A AAA A A+AAAAA AAAA
A A A ++++++++++x
AAA A A AA AAAAAAAAA
A A A A
A AAA AAAAAA AAAAAAA
A AA AA A A A
AA AA A A A A A A
A AA AAAAAAAAAAAA A
AA A
AAAAAAAAAAAAAAAAAAAA
meta
zas otrzymuje np dla x=1,y=1:
gra labirynt
AAAAAAAAAAAAAAAAAAAA
A A A A
A AA AAAAAA A A A A
AAA A AA A A A A A
A A AA AA A A A A A
A A A A A A
AA AAA AAAA AAAAAAAA
A A
AAA AAAAA AAAAAAA AA
A A A A A A A
A AAA A A AAAAA AAAA
A A A x
AAA A A AA AAAAAAAAA
A A A A
A AAA AAAAAA AAAAAAA
A AA AA A A A
AA AA A A A A A A
A AA AAAAAAAAAAAA A
AA A
AAAAAAAAAAAAAAAAAAAA
podaj wspolrzedne
x = 1
y = 1
AAAAAAAAAAAAAAAAAAAAA++++ A A AA AA+AAAAAA A A A AAAA++A AA A A A A A
A A+AA AA A A A A AA ++ A A A A AAA+AAA AAAA AAAAAAAAA ++++++++ A
AAA AAAAA+AAAAAAA AAA A A A+A A AA AAA A A+AAAAA AAAAA A A ++++++++++x
AAA A A AA AAAAAAAAAA A A AA AAA AAAAAA AAAAAAAA AA AA A A A
AA AA A A A A A AA AA AAAAAAAAAAAA AAA AAAAAAAAAAAAAAAAAAAAA
Aby kontynuować, naciśnij dowolny klawisz . . .
bardzo mi zalezy na tym programie bo inaczej nie otrzymam zaliczenia prosze o pomoc