Anda di halaman 1dari 8

LAPORAN AKHIR

Mata Praktikum

: Perancangan dan Analisis Algoritma

Kelas

: 3IA16

Praktikum ke-

:4

Tanggal

: 24 Oktober 2016

Materi

: Algoritma BFS dan DFS

NPM

: 51414804

Nama

: Aufi Nabila

Ketua Asisten

: Syarif

Nama Asisten

Paraf Asisten

Jumlah Lembar

: 7 Lembar

LABORATORIUM TEKNIK INFORMATIKA


UNIVERSITAS GUNADARMA
2016/2017

LISTING PROGRAM
#include<stdio.h>
#include<conio.h>
int q[20],top=-1,front=-1,rear=-1,a[20][20],vis[20],stack[20];
int del();
void add(int item);
void bfs(int s, int n);
void dfs(int a, int n);
void push(int item);
int pop();
main(){
int n,i,s,ch,j;
printf("Masukkan angka :");
scanf("%d",&n);
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
printf("Masukkan %d jika mempunyai simpul %d selain itu 0 :",i,j);
scanf("%d",&a[i][j]);
}
}
printf("Matriks adjasensi :\n");
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
printf("%d",a[i][j]);
}
printf("\n");}
for(i=1;i<=n;i++)
a:
vis[i]=0;
printf("\nMenu");
printf("\n1.BFS");
printf("\n2.DFS");
printf("\nPilihan:");
scanf("%d",&ch);
printf("\nMasukkan simpul sumber : ");
scanf("%d",&s);
switch(ch)
{
case 1:bfs(s,n);
goto a;
case 2:dfs(s,n);
goto a;
case 3:

break;
}
return(0);
}
void bfs(int s, int n){
int p,i;
add(s);
vis[s]=1;
p=del();
if(p!=0)
printf("%d",p);
while(p!=0){
for(i=1;i<=n;i++)
if((a[p][i]!=0)&&(vis[i]==0)){
add(i);
vis[i]=1;
}
p=del();
if(p!=0)
printf("%d",p);
}
for(i=1;i<=n;i++)
if(vis[i]==0)
bfs(i,n);
}
void add(int item){
if(rear==19)
printf("Antrian Full");
else
if(rear==-1){
q[++rear]=item;
front++;
}
else
q[++rear]=item;
}
int del(){
int k;
if((front>rear)||(front==-1))
return(0);
else{
k=q[front++];
return(k);}}
void dfs(int s, int n){

int i,k;
push(s);
vis[s]=1;
k=pop();
if(k!=0)
printf("%d",k);
while(k!=0){
for(i=1;i<=n;i++)
if((a[k][i]!=0)&&(vis[i]==0)){
push(i);
vis[i]=1;
}
k=pop();
if(k!=0)
printf("%d",k);
}
for(i=1;i<=n;i++)
if(vis[i]==0)
dfs(i,n);}
void push(int item){
if(top==19)
printf("Stack overflow");
else
stack[++top]=item;
}
int pop(){
int k;
if(top==-1)
return(0);
else{
k=stack[top--];
return(k);
}
}

LOGIKA PROGRAM
Pada laporan akhir kali ini akan dijelaskan mengenai penggunaan Algoritma BFS dan DFS.
BFS (Breadth First Search) adalah algoritma yang melakukan pencarian secara melebar yang
mengunjungi simpul secara preorder yaitu mengunjungi suatu simpul kemudian mengunjungi
semua simpul yang bertetangga dengan simpul tersebut terlebih dahulu. Sedangkan DFS
adalah algoritma yang melakukan pencarian secara mendalam.
Berikut akan saya jelaskan program yang telah saya buat:

Merupakan singkatan dari standar input output header yang digunakan untuk operasi I/O oleh
bahasa C, akan tetapi bisa juga digunakan dalam bahasa C++. Misalnya scanf, printf.

Adalah file Header yang berfungsi untuk menampilkan hasil antarmuka pengguna, juga
digunakan untuk memanggl perintah-perintah yang terdapat pada library.

Digunakan untuk mendeklarasikan variabel-variabel yang akan digunakan untuk menghitung


BFS dan DFS berupa stack dan variabel lainnya dengan type data integer.

Mendefinisikan procedure untuk antrian penuh dengan type data integer.

Mendefinisikan variabel untuk menghitung BFS dengan type data integer.

Mendefinisikan variabel untuk menghitung DFS dengan type data integer.

Mendefinisikan procedure jika terjadi kelebihan data. Operasi Push adalah operasi
menambahkan elemen pada urutan terakhir (paling atas).

Mendeklarasikan pop dengan type data integer. Operasi pop adalah mengambil sebuah
elemen data pada urutan terakhir dan menghapus elemen tersebut dari stack

Merupakan procedure utama dalam sebuah program.

Mendeklarasikan variabel n, i, s, ch, dan j dengan type data integer

Printf berfungsi untuk mencetak tulisan Masukkan angka : yang akan ditampilkan pada
output program.
Scanf berfungsi untuk membaca tulisan yang telah dicetak oleh printf dengan mengartikan
data inputan akan ditampilkan dalam bentuk decimal dan &n mengartikan data akan disimpan
sementara dengan variabel n.

Digunakan sebagai kondisi perulangan dengan ketentuan program akan mengeksekusi


bilangan dimulai dari 1, akan berhenti mengeksekusi jika variabel i lebih besar dai variabel n
dengan variabel i akan bertambah 1 untuk setiap terjadi perulangan

Digunakan sebagai identitas blok pernyataan yang nantinya akan dipanggil pada program
ketika program akan dieksekusi.

Digunakan sebagai perintah kondisi percabangan dimana terdapat case-case yang


dideklarasikan setelah pernyataan ini.

Digunakan sebagai pilihan pertama untuk mengeksekusi blok procedure bfs.

Digunakan sebagai pilihan kedua untuk mengeksekusi blok procedure dfs

Digunakan sebagai pilihan ketiga jika angka yang kita masukkan bukan 1 atau 2 maka
program akan berhenti mengeksekusi.

Digunakan untuk mengarahkan program akan melanjutkan eksekusi ke blok program a.

Untuk menghapus elemen variabel p

Digunakan sebagai kondisi percabangan jika hasil bagi variabel tidak sama dengan 0

OUTPUT

Anda mungkin juga menyukai