PDA

View Full Version : برج هانوی



mahtab_18
دوشنبه 15 اسفند 1384, 07:27 صبح
سلام
اگر کسی می تواند توضیحی در رابطه به عملکرد برج هانوی بدهد.

با تشکر

ms_zandy
دوشنبه 15 اسفند 1384, 15:38 عصر
:متفکر:

این مسئله شامل سه میله و 10 دیسک است که دیسک ها دارای شماره واندازه اند که نسبت به هم نسبت عکس دارند (هرچه شماره دیسک بیشتر اندازه کوچکتر می شود )
کاری که باید کرد آن است که با کمترین حرکت دیسک ها را از بزرگ به کوچک چیند


اگر درگروه زبانهای خانواده C سرچ کنی می توانی سرس آن رابیابی
:گیج:

aira
دوشنبه 15 اسفند 1384, 20:59 عصر
http://www.planet-source-code.com/
ت. این سایت همه چی هست

daneshjoye_azad
شنبه 20 اسفند 1384, 16:39 عصر
سلام امیدوارم این توضیح کافی باشه.
ابتدا دیسک 1 رو به میله سوم منتقل مکنیم بعد دیسک 2 رو روی دیسک اول در میله سوم میبریم حالا دیسک 3 رو به میله دوم منتقل میکنیم وبعد به ترتیب دیسکهای 2و1 رو به میله دوم منتقل میکنیم . بعد دیسکهای موجود در میله دوم را به ترتیب1و2و3 به میله سوم منتقل میکنیم. وسپس دیسک 4 رو به میله دوم منتقل کنی و سپس دیسکهای موجود در میله سوم را به میله دوم منتقل کنی

mahtab_18
یک شنبه 21 اسفند 1384, 09:01 صبح
سلام
خیلی ممنون از جوابها من به ÷اسخ سوالم رسیدم

متشکرم

sahar940
سه شنبه 02 خرداد 1385, 10:21 صبح
سلام برای برنامه نویسی برج هانوی ما چطور میتونیم عمل کنیم؟

Mahdi_Delphi
سه شنبه 02 خرداد 1385, 10:42 صبح
به شیوه بازگشتی .
اگه درست یادم باشه کدش توی همین فروم بود
نوشتن خیلی ساده هست

the Dead
پنج شنبه 16 اسفند 1386, 18:54 عصر
const max=40;
type
elem=integer;
stack=record
mytop:integer;
items:array[0..max-1] of elem;
end;

function empty(s:stack):boolean;
begin
if s.mytop=-1 then
empty:=true
else
empty:=false
end;

function full(s:stack):boolean;
begin
if s.mytop=max-1 then
full:=true
else
full:=false;
end;
procedure clear(var s:stack);
begin
s.mytop:=-1;
end;

procedure push(var s:stack;x:elem);
begin
s.mytop:=s.mytop+1;
s.items[s.mytop]:=x;
end;

procedure pop(var s:stack;var x:elem);
begin
x:=s.items[s.mytop];
s.items[s.mytop]:=0;
s.mytop:=s.mytop-1;
end;
procedure scopy(s1:stack;s2:stack;s3:stack;tn:integer);
var t,i:integer;
begin
writeln;
for i:=1 to tn do
begin
t:=0;
if not empty(s1) then
pop(s1,t);
write('s1 :');
write(t,',');
end;
writeln;
for i:=1 to tn do
begin
t:=0;
if not empty(s2) then
pop(s2,t);
write('s2 :');
write(t,',');
end;
writeln;

for i:=1 to tn do
begin
t:=0;
if not empty(s3) then
pop(s3,t);
write('s3 :');
write(t,',');
end;
writeln;
writeln('*********');
end;
procedure tower(topn:integer;var s1:stack;var s2:stack;var s3:stack;src:char;aux:char;dest:char);
var t:integer;

begin
if topn=1 then
begin
writeln;
write('Disk 1 from ',src,' to ',dest);
pop(s1,t);
push(s3,t);
end
else begin
tower(topn-1,s1,s3,s2,src,dest,aux);
writeln;
write('Disk ',topn,' from ',src,' to ',dest);
pop(s1,t);
push(s3,t);
tower(topn-1,s2,s1,s3,aux,src,dest);

end;
end;

var
a:array[1..8,1..8] of integer;
i,j,n1,fl,n2,n3,n4:integer;
c:char;
st1:string;
s1,s2,s3:stack;
begin
clear(s1);
clear(s2);
clear(s3);
write('Enter Num of the disks :');
readln(i);

for j:=i downto 1 do
push(s1,j);
tower(i,s1,s2,s3,'A','B','C');
readln;
end.

amin1softco
یک شنبه 05 اردیبهشت 1389, 19:45 عصر
والا یک سرچ کوچیک بزنی تو انجمن های همین بخش رو وبلاگا روی زمین و زمان سورس این برج هانوی هست این به روش بازگشتیشه :



#include <iostream>

typedef char tower;

void move(int n, tower x, tower y, tower z) {
if (n > 0) {
move(n - 1, x, z, y);
std::cout << "Move #" << n << " from " << x << " to " << y << '\n';
move(n - 1, z, y, x);
}
}
void main() {
std::cout << "How many disks? ";
int n;
std::cin >> n;
move(n, 'A', 'B', 'C');
}