0% found this document useful (0 votes)
76 views6 pages

Coding BFS Matlab

The document describes an algorithm to solve water glass problems using breadth-first search (BFS). It initializes the root node with the initial glass states and defines rules to generate child nodes by transferring water between glasses. It then performs BFS, generating nodes level-by-level until the goal state is found or the maximum level is reached. If a goal is found, it traces back through the parent nodes to display the sequence of rule applications.

Uploaded by

pipit sukma
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
76 views6 pages

Coding BFS Matlab

The document describes an algorithm to solve water glass problems using breadth-first search (BFS). It initializes the root node with the initial glass states and defines rules to generate child nodes by transferring water between glasses. It then performs BFS, generating nodes level-by-level until the goal state is found or the maximum level is reached. If a goal is found, it traces back through the parent nodes to display the sequence of rule applications.

Uploaded by

pipit sukma
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 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