سلام
اگر کسی می تواند توضیحی در رابطه به عملکرد برج هانوی بدهد.
با تشکر
Printable View
سلام
اگر کسی می تواند توضیحی در رابطه به عملکرد برج هانوی بدهد.
با تشکر
:متفکر:
این مسئله شامل سه میله و 10 دیسک است که دیسک ها دارای شماره واندازه اند که نسبت به هم نسبت عکس دارند (هرچه شماره دیسک بیشتر اندازه کوچکتر می شود )
کاری که باید کرد آن است که با کمترین حرکت دیسک ها را از بزرگ به کوچک چیند
اگر درگروه زبانهای خانواده C سرچ کنی می توانی سرس آن رابیابی
:گیج:
http://www.planet-source-code.com/
ت. این سایت همه چی هست
سلام امیدوارم این توضیح کافی باشه.
ابتدا دیسک 1 رو به میله سوم منتقل مکنیم بعد دیسک 2 رو روی دیسک اول در میله سوم میبریم حالا دیسک 3 رو به میله دوم منتقل میکنیم وبعد به ترتیب دیسکهای 2و1 رو به میله دوم منتقل میکنیم . بعد دیسکهای موجود در میله دوم را به ترتیب1و2و3 به میله سوم منتقل میکنیم. وسپس دیسک 4 رو به میله دوم منتقل کنی و سپس دیسکهای موجود در میله سوم را به میله دوم منتقل کنی
سلام
خیلی ممنون از جوابها من به ÷اسخ سوالم رسیدم
متشکرم
سلام برای برنامه نویسی برج هانوی ما چطور میتونیم عمل کنیم؟
به شیوه بازگشتی .
اگه درست یادم باشه کدش توی همین فروم بود
نوشتن خیلی ساده هست
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.
والا یک سرچ کوچیک بزنی تو انجمن های همین بخش رو وبلاگا روی زمین و زمان سورس این برج هانوی هست این به روش بازگشتیشه :
#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');
}