Mata Praktikum
Kelas
: 3IA16
Praktikum ke-
:4
Tanggal
: 24 Oktober 2016
Materi
NPM
: 51414804
Nama
: Aufi Nabila
Ketua Asisten
: Syarif
Nama Asisten
Paraf Asisten
Jumlah Lembar
: 7 Lembar
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.
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
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 identitas blok pernyataan yang nantinya akan dipanggil pada program
ketika program akan dieksekusi.
Digunakan sebagai pilihan ketiga jika angka yang kita masukkan bukan 1 atau 2 maka
program akan berhenti mengeksekusi.
Digunakan sebagai kondisi percabangan jika hasil bagi variabel tidak sama dengan 0
OUTPUT