Manualai.lt Forumas
C++ => C++ Klausimai ir pagalba => Temą pradėjo: Tautvydas 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
-
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ą
-
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
-
24 atrodo gynimas, tai savaitė su kapeikom :D