[ virtualx @ 01.07.2008. 13:30 ] @
| imam za seminarski rad , napisati program za kule hanoja u c++.
kod sam nasao,malo proucio ,ali nisam skuzio bas najbolje,pa molim ako moze tko pomoci, da pojasni malo kod,i sta koja linija kod-a radi.
Code:
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
void KuleHanoja(int n, char lijevo, char desno, char srednje) {
// oslobađa prvi stupac
if (n > 1)
KuleHanoja(n-1,lijevo,srednje,desno);
cout << "Prenesi disk od " << lijevo << " do " << desno << '\n';
//oslobađa drugi stupac
if (n > 1) KuleHanoja(n-1,srednje,desno,lijevo);
}
int main() {
int n,pot;
cout << "\nKoliko zelite diskova?\n";
cout<<"Broj diskova n= ";
cin>>n;
cout<<"Potrebno je uraditi slijedece: \n\n";
//poziva se rekurzivna funkcija
KuleHanoja(n,'1','3','2');
//matematička formula rješavanja problema
pot=pow(2,n)-1;
cout<<"\t\t\nPotrebno je "<<pot<<" poteza da se prebace svi diskovi."<<endl;
getch ();
return 0;
}
|
[ kiklop74 @ 01.07.2008. 19:34 ] @
[ virtualx @ 02.07.2008. 00:11 ] @
ma znam sta je to, imam i igricu tower hanoi
problem je sto nerazumijem neke linije koda sta konkretno rade.
npr:
// oslobađa prvi stupac
if (n > 1)
KuleHanoja(n-1,lijevo,srednje,desno);
cout << "Prenesi disk od " << lijevo << " do " << desno << '\n';
//oslobađa drugi stupac
if (n > 1) KuleHanoja(n-1,srednje,desno,lijevo);
//poziva se rekurzivna funkcija
KuleHanoja(n,'1','3','2');
//matematička formula rješavanja problema
pot=pow(2,n)-1;
[ Iljo @ 06.07.2008. 23:19 ] @
Algoritam je dobar u programu, ali si popravi sintaksu (iostream.h, getch()???) i kompajliraj te pokreni program s nekoliko jednostavnih primjera. Ako ti onda nije nešt jasno javi.
Ideja algoritma je inače...
Znači trebaš prebacit n diskova sa lijevog štapa na desni koristeći srednji.
E sad ovo ti ide rekurzivno:
- prvo gornjih n-1 diskova sa lijevog štapa prebaci na srednji koristeći desni
- ostao ti je najveći disk na lijevom štapu, to je n-ti, prebaci ga direktno na desni
- sad onih n-1 diskova na srednjem štapu prebaci na desni štap koristeći lijevi štap
Ako je n=1 prebaci odma direkt sa lijevog na desni.
[ virtualx @ 13.08.2008. 19:00 ] @
moze li jos netko da malo objasni ovaj zadatak i te rekurzivne funkcije.
Copyright (C) 2001-2024 by www.elitesecurity.org. All rights reserved.