Anda di halaman 1dari 3

DFS

clear all;
x=input ('Keadaan Awal y=input ('Keadaan Awal a=input (' Goal b=input (' Goal
Gelas Gelas Gelas Gelas
A (4 Liter) berisi
B (3 Liter) berisi =
A (4 Liter) berisi B (3 Liter) berisi
@tanda node ini belum ditampung tanda_tampung(1:5,1:4)=0;
$node awal diberitanda ditampung tanda_tampung (x+1, y+1)=17
stack=[];
tampungRule=[]; solusiRule=[]; solusi=[];
selesai=0; Jm1_node_yang_ditampung=0; Rl='Gelas B diisi penuh R2='Gelas A diisi penuh
R3='Kosongkan isi Gelas A R4='Kosongkan isi Gelas B
R5='Tuangkan isi Gelas B ke Gelas A hingga Gelas A penuh R6='"Tuangkan isi Gelas A ke
Gelas B hingga Gelas B penuh
R7='"Tuangkan seluruh air dari Gelas B ke Gelas A R8='Tuangkan seluruh air dari Gelas A
ke Gelas B tRule=(R1;R2;R3;R4;R5;R6;R7;R9] ;
’check jika node (x,y) adalah Goal
if (x==a) B(y==b) solusi=[x yl]; selesai=1; end
while selesai==0
if y<3
&R1='"Gelas B diisi penuh’; xl=x;yl=3; tbhuat node anak (x1, ¥1)
&%jika node anak belum pernah dimasukkan stack if tanda_tampung(x1+1, yl1+1)==0
stack=([stack;
[xl yl] ]z
• ==
• See te te

sete
Se ote
Jml_node yang ditampung=Jm1_ node yang ditampung+1;
tampungRule=[tampungRule;R1);
end end
if x<4

R2='gelas A diisi penuh';


xl=4;yl=y; %buat node anak (x1,¥1)
$jika node ini belum dikunjungi (0),maka ditampung
$jika node anak belum pernah dimasukkan stack
if tanda_tampung(x1+1, yl+1) == stack=[stack:[xl yl]]: Jml node yang ditampung=dJml_node
yang ditampung+1;
tampungRule=[tampungRule;R2);
end end if x>0
$R3="kosongkan isi gelas A‘; x1=O;yl=y; ‘tbuat node anak (x1, ¥1)} $jika node anak belum
pernah dimasukkan stack if tanda_tampung (x1+1, y1+1)== stack=[stack; [xl yl]];
Jmi_node yang ditampung=Jml_node_yang ditampung+1; tampungRule=[tampungRule;R3]
; end end
if y>0 $R4='"kosongkan isi gelas B'; xl=x;y1=0; tbuat mode anak (x1,y1) %jika node anak
belum pernah dimasukkan stack if tanda_tampung(x1+1, y1+1)== stack=[stack; [xl y1]];
Jml_ node yang ditampung=Jml_node yang ditampung+1;
tampungRule=([tampungRule;R4) ; end end
if (x+y>=4) & (y>0) &R5="Tuangkan isi gelas B ke gelas A hingga gelas A penuh";
xl=4;yl=x+y-4; ‘buat node anak (x1,yl1) tjika node anak belum pernah dimasukkan stack if
tanda_tampung(x1+1,y1+1)== stack=[stack; [xl y1]];
Jm1_node_yang_ditampung=Jml1_node_yang ditampung+1;
tampungRule=[tampungRule;R5]; end
end
if (x+y>=3) £(x>0) $R6="Tuangkan isi gelas A ke Gelas B hingga gelas B penuh'; x1l=M¢y-
3;y1=3; ‘tbuat mode anak (x1,¥1) &jika node anak belum pernah dimasukkan stack if
tanda_tampung(x1+1, yl+1)== stack=[stack;[=1 y1]];
Jml_node_yang_ditampung=Jm1_node_yang_ditampung+1;
tampungRule=[tampungRule;R6] ; end end
if (xty<=4) E&P ty>0) SR7='Tuangkan seluruh air dari gelas B ke Gelas A‘; x1l=x+y;yl1=0;
%buat node anak (x1,y¥y1) $jika node anak belum pernah dimasukkan stack if
tanda_tampung(x1+1, y1+1)==0 stack=[stack; [x1 yl] ]?
Jml_node_yang_ditampung=Jml_node_yang_ditampung+1;
tampungRule=([tampungRule;R7); end
end
if (x+y<=3) & (x>0) $RB='Tuangkan seluruh air dari gelas A ke gelas B'; x1=0;yl=x+y; ‘tbuat
node anak (xl,yl) %jika node anak belum pernah dimasukkan stack if tanda_tampung
(x1+1, y1+1)== stack=[stack; [xl y1]]; Jml_node yang ditampung=Jml_node_yang
ditampung+1;
tampungRule=(tampungRule;R8];
end
end
if Jml_nede_yang ditampung ~=0 solusi=(solusi; [x y])]i Jml_node_yang ditampung = 0
end
if ~isempty (stack)
&stack terakhir jadi node baru yang akan dikunjungi x=stack (end, 1) ;y=stack (end, 2);
stack (end,:)=[];
nn
else selesai=1; end $node yang terpilih ditandai tanda tampung(x+1, y+1)=1; check jika
node ini adalah goal if (x==a) & (y==b) solusi=[solusi; (x y¥)); selesai=1; end
“end
if solusi(end,:)== [a b] ele; disp("Keadaan Awal : ") solusi (1, :)
jml_langkah=size(solusiRule, 1); for k=1:jml_langkah solusiRule (k, :) solusi(k+1, :) pause
end disp("Goal tercapai'); pause cle
else disp('Goal tidak akan pernah tercapai'); end

Anda mungkin juga menyukai