You are on page 1of 6

%===================================================================================

%Solusi Masalah Water Glass


Menggunakan Algoritma BFS
%by : T .Sutojo
%===================================================================================
Clc;
Clear all ;
X=input ( ‘ keadaan awal : gelas A ( 4 liter ) berisi = ….’) ;
y=input ( ‘ keadaan awal : gelas B ( 3 liter ) berisi = ….’) ;
a= input ( ‘ goal : gelas A ( 4 liter ) berisi =….’) ;
b= input ( ‘ goal : gelas B ( 3 liter ) berisi =….’) ;
level = input ( ‘ jumlah level maksimun =… ‘) ;

data _sementara =[ ] ;
% queue = [1 ; - 1 ] , maksud 1 = node ke -1, -1 = tanda ganti level queue [ 1 ; -1] ;

%node awal
Pohon .nama_orang_tua=0;
Pohon.nama=1 ;
Pohon.data=[x y] ;
Pohon.rule=’ ‘ ;

%tanda node belum pernah di proses


Tanda (1:5,1:4) =0:
Tanda (x+1,y+1);
nama=;
selesai=0;
counter_level =0;
data_ setiap_level=[ ] ;
goal = [ ] ;

while selesai==0
%jika ditemukan tanda ganti level
If queue( 1 ) == -1
If length (data_setiap_level ) ==0
Break
End
%check data_setiap_level , ada goal atau tidak
For I =1 : length (data_setiap_level ) ;
J=data_setiap_level ( I );
X=pohon ( j ).data ( 1 ) ;
y=pohon ( j ).data ( 2 ) ;
%jika sudah ditemukan Goal
I f x==a & y==b
%tampung nama node sebagai goal
Goal =[ goal ; pohon [ j ] .nama ] ;
Selesai =1;
%jika sudah ditemukaan Goal
Level =counter_level ;
end
end
%karena diganti level , node diperbarui
queue (1 ) = [ ] ;
%pemberitahuan tanda ganti level berikutnya
queue = [ queue ; - 1 ] ;
%data setiap level dihapus
data_setiap_level = [ ] ;
%counter level bertambah
Counter_level =counter_level +1 ;

I f counter_level ==level=1
Selesai =1 ;
End
End
Nama _orang _tua=queue ( 1);
%queue teratas telah diambil , maka dikosngkan
Queue (1)= [ ]
X=nama_orang_tua ) .data ( 1 ) ;
y=nama_orang_tua ) .data ( 2 ) ;

%aturan-aturan
I f y<3
%R1 = ‘ gelas B diisi penuh ‘ ;
X1 =x ;y 1 =3 ; %data node anak
I f tanda (x1+ 1, y1 =1 )
Tanda (x1 + 1 , y 1 + 1 ) ==0
Data = [ x1 y1 ] ;
%nama anak
Nama =nam +1 ;
Rule = ‘ gelas B diisi penuh

% menegisi data anak pada struktur pohon


Pohon ( nama )
Struct ( ‘nama_orang_tua ,’nama’,’nama,’data’,data, ule ‘,rule ) ;
%nama dimasukan ke queue
Queue=[ queue;nama] ;
%berisi data anak disetiap level
Data_setiap_level_= [ data_setiap_level ; nama ] ;
End
End

I f x<4
%R2= ‘geals A diisi penuh ‘ ;
X1= 4; y 1 %data node anak
If tanda ( x1= 1, y1 = 1 ) ==0
Tanda (x1= 1,y1 =1 ) =1 ;
Data = [x1 y1 ] ;
% nama anak
Nama=nama=1+;
Rule=’gelas A diisi penuh

Pohon (nama)=
Struct ( ‘ nama_ orang_tua ‘ ,nama’,nama,’data’,data,’r
Queue=[queue;nama];
Data_setiap_level=[data_setiap_level; nama ] ;
End
End

I f x>0
%R3=kosongkan isi gelas A’ ;
If tanda (x1= 1,y1 +1 )==0
tanda ( x1= 1,y1 +1 )==1;
data= [x1 y1 ];
nama=nama +1;
rule=’kosong isi gelas A

pohon (nama)=
Struct (‘ nama_orang_tua’,nama_orang_tua, ‘nama’, nama, ‘data’ , data, ‘r ule ‘rule ) ;
Queue=[queue ; nama ];
Data_setiap_level=[data_setiap_level; nama ] ;
End
End

%R4=kosongkan isi gelas B ’ ;


If tanda (x1= 1,y1 +1 )==0
tanda ( x1= 1,y1 +1 )==1;
data= [x1 y1 ];
nama=nama +1;
rule=’kosong isi gelas B
pohon (nama)=
Struct (‘ nama_orang_tua’,nama_orang_tua, ‘nama’, nama, ‘data’ , data, ‘r ule ‘rule ) ;
Queue=[queue ; nama ];
Data_setiap_level=[data_setiap_level; nama ] ;
End
End
%R5=’ tuangkan isi gelas B ke gelas A hingga gelas A penuh ‘ ;
X1=4; y1 = x=y-4 ; %data node anak
If tanda (x1= 1,y1 +1 )==0
tanda ( x1= 1,y1 +1 )==1;
data= [x1 y1 ];
nama=nama +1;
rule=’tuangkan isi gelas B ke gelas A hingga gelas penuh ‘ ;
pohon (nama)=
Struct (‘ nama_orang_tua’,nama_orang_tua, ‘nama’, nama, ‘data’ , data, ‘r ule ‘rule ) ;
Queue=[queue ; nama ];
Data_setiap_level=[data_setiap_level; nama ] ;
End
End
I f (x+y>=3) & (x>0)
%R6=’ tuangkan isi gelas B ke gelas A hingga gelas B
Penuh ‘:
X1=3; y1 = x=y-3 ; %data node anak
If tanda (x1= 1,y1 +1 )==0
tanda ( x1= 1,y1 +1 )==1;
data= [x1 y1 ];
nama=nama +1;
rule=’tuangkan isi gelas B ke gelas A hingga gelas A penuh ‘ ;
pohon (nama)=
Struct (‘ nama_orang_tua’,nama_orang_tua, ‘nama’, nama, ‘data’ , data, ‘r ule ‘rule ) ;
Queue=[queue ; nama ];
Data_setiap_level=[data_setiap_level; nama ] ;
End
End
I f (x+y<=4) & ( y>0)
%R7=’ tuangkan isi gelas B ke gelas A hingga gelas B
Penuh ‘:
X1=x+y = x=y1-0 ; %data node anak
If tanda (x1= 1,y1 +1 )==0
tanda ( x1= 1,y1 +1 )==1;
data= [x1 y1 ];
nama=nama +1;
rule=’tuangkan isi gelas B ke gelas A hingga gelas penuh ‘ ;
pohon (nama)=
Struct (‘ nama_orang_tua’,nama_orang_tua, ‘nama’, nama, ‘data’ , data, ‘r ule ‘rule ) ;
Queue=[queue ; nama ];
Data_setiap_level=[data_setiap_level; nama ] ;
End
End
I f (x+y<=3) & ( x>0)
%R8=’ tuangkan isi gelas B ke gelas A hingga gelas B
Penuh ‘:
X1=0 ;y 1= x=y1-0 ; %data node anak
If tanda (x1= 1,y1 +1 )==0
tanda ( x1= 1,y1 +1 )==1;
data= [x1 y1 ];
nama=nama +1;
rule=’tuangkan semua air dari gelas A ke gelas B hingga gelas penuh ‘ ;
pohon (nama)=
Struct (‘ nama_orang_tua’,nama_orang_tua, ‘nama’, nama, ‘data’ , data, ‘r ule ‘rule ) ;
Queue=[queue ; nama ];
Data_setiap_level=[data_setiap_level; nama ] ;
End
End
%=== proses pencarian solusi (dari Node awal sampai Goal ) =====
%jika ada Goal yang ditemukaan
If ~ isempty (goal )
Clc ;
Disp ( [ ‘Goal ditemukaan pada level ke :
Num2str ( level ) ] ) ; pause
Data= [ ] ;
Rule= [ ] ;
Nama=pohon (goal (end) ) . nama ;
While nama_orang_tua ~=0
Data= [ pohon 9nama). Data ; data ] ;
Rule= [ pohon ( nama ) . rule ; rule ] ;
Nama_orang_tua=pohon (nama). Nama_orang_tua ;

Nama=nama_orang_tua ;

End
Clc
Disp ( ‘keadan awal : ‘ ) ; data ( 1 , : )

For k=2 : length ( data)


Rule ( k – 1, : )
Data ( k , : )
Pause
End
Data
%jika tidak ada goal yang ditemukan
Elsa
Clc
Disp ( ‘ Goal tidak pernah ditemukan ‘0 ;
end

You might also like