Autorius Tema: C++ rekursija, kambariu radimas ( labirintas )  (Skaityta 163 kartus)

Neprisijungęs Tautvydas

  • Naujokas
  • *
  • Įrašai: 350
  • Karma: +7/-0
    • Žiūrėti profilį
C++ rekursija, kambariu radimas ( labirintas )
« Įrašytas: 2014-02-12 22:07:40 pm »
Sveiki,

gal kas esat susidūrę su tokio tipo uždaviniais ir galėtu duoti patarimų? Nusiskaitymą pasidariau, kaupiu viską vektoriuose.

Prisegu užduoties aprašą, jei kas turite įdėjų, papasakosiu daugiau, kaip aš viską mąstau ir gal "užvesit" ant kelio.

Dėkui

Neprisijungęs Tautvydas

  • Naujokas
  • *
  • Įrašai: 350
  • Karma: +7/-0
    • Žiūrėti profilį
Ats: C++ rekursija, kambariu radimas ( labirintas )
« Atsakymas #1 Įrašytas: 2014-02-12 23:35:00 pm »
Tiek kodo esu pasirašęs:

#include <vector>
#include <string>
#include <fstream>
#include <iostream>

using namespace std;


class Pilis {
private:
int m;
int n;
vector < vector<int> > Cele;
vector < vector<string> > Kelias;
public:
Pilis(): n(0), m(0) {}

void Skaityti(string file);
void Spausti();
string Kur(int nn, int mm);
void Kambariai();
};


void Pilis::Skaityti(string file){
ifstream in(file);
vector <int> skait;
in >> n;
in >> m;
int sk;
for ( int i = 0; i < n; i++ ) {
for ( int j = 0; j < m; j++ ) {
in >> sk;
skait.push_back(sk);
}
Cele.push_back(skait);
skait.resize(0);
}

}

void Pilis::Spausti() {
ofstream out("ats.txt");
for ( int i = 0; i < n; i++ ) {
for ( int j = 0; j < m; j++ ) {
out << Cele[i][j] << " ";
}
out << endl;
}

}

string Pilis::Kur(int nn, int mm) {
int v = 0, a = 0, k = 0, d = 0;

int laik = Cele[nn][mm];
string tinka;
if ( laik / 8 == 1 ) {
a = 1;
laik = Cele[nn][mm] % 8;
}

if ( laik / 4 == 1 ) {
laik = Cele[nn][mm] % 4;
d = 1;
}

if ( laik / 2 == 1) {
v = 1;
laik = Cele[nn][mm] % 2;
}

if ( laik == 1 )
k = 1;

if (a==0)
tinka+="a";
if (d==0)
tinka+="d";
if (k==0)
tinka+="k";
if (v==0)
tinka+="v";

cout << tinka << endl;
return tinka;

}

void Pilis::Kambariai() {


}

void Pilis::Eiti() {


}

int main() {
Pilis P;
P.Skaityti("file.txt");
P.Spausti();
P.Kur(3,3);
system("pause");
}




Funkcija " string Pilis::Kur(int nn, int mm) "

patikrina pasirinkto langelio reikšmę pagal tuos skaičius pateiktus pradiniame faile. Ir išspausdina kryptis į kurias puses galima eiti.

Pvz jei tik į dešinę, spausdins "d" , jei į apačia ir dešinę tai "ad" ir t.t.


Pagal tai reiktų judėti palei sienas, kol baigiasi visi įmanomi keliai, bet vat tose vietose, kur galima į kelias puses,kaip čia atsižymėti, kaip grįžti vėl patikrinimui čia reiktų? Niekaip neišmąstau.


P.S. Būtina uždaviny panaudoti rekursiją

Neprisijungęs evolution

  • Naujokas
  • *
  • Įrašai: 100
  • Karma: +2/-0
    • Žiūrėti profilį
Ats: C++ rekursija, kambariu radimas ( labirintas )
« Atsakymas #2 Įrašytas: 2014-02-14 15:51:25 pm »
cha :D pirmasis laboratorinis. Kambariokui irgi toks pat kliuvo. Iš pradžių buvo pasirašęs, kad duomenis pasiverstų į 0 ir 1 žemėlapį, bet po to lygtais perrašė. Prieš du metus Kazickio programavimo turnyre teko šitu uždaviniu susidurti, tai dėl labai mažo laiko limito padariau mini hack'ą įvesdamas sąlygą, kad susidaro kambarys, kai sienų suma dalijasi iš 15. good luck. Dar turi beveik dvi savaites pasirašyt kodui :D

Neprisijungęs Tautvydas

  • Naujokas
  • *
  • Įrašai: 350
  • Karma: +7/-0
    • Žiūrėti profilį
Ats: C++ rekursija, kambariu radimas ( labirintas )
« Atsakymas #3 Įrašytas: 2014-02-14 18:12:33 pm »
24 atrodo gynimas, tai savaitė su kapeikom :D

Manualai.lt Forumas

Ats: C++ rekursija, kambariu radimas ( labirintas )
« Atsakymas #3 Įrašytas: 2014-02-14 18:12:33 pm »