You are on page 1of 16

Mei 2, 2021

Laporan Praktikum ASD 15.1: Graph


Praktikum Algoritma dan Struktur Data

Nama : Falana Rofako Hakam


NRP : 3120600056
Kelas : 1 D4 Teknik Informatika B

POLITEKNIK ELEKTRONIKA NEGERI SURABAYA


PRODI TEKNIK INFORMATIKA TAHUN 2021
Mei 2, 2021

Percobaan:

1. Graph Statis

A. Listing program

#include <stdio.h>
#include <stdlib.h>
#define N 16
#define M 9999
#define MAX 5

typedef struct{
int data[MAX];
int count;
} stack;
typedef struct{
int Q[N][N], P[N][N], R[N][N];
}typegraph;

void inisialisasi(stack *);


void push(int, stack *);
int pop(stack *);
void input(typegraph *);
void warshall(typegraph *);
void tampilmatrikslama(typegraph *);
void tampilmatriksbaru(typegraph *);
int ReadingRoute(int, int, typegraph *);

typegraph graph;
stack tumpukan;
int jml_ordo;

int main()
{
int asal, tujuan, load;
typegraph *g = &graph;

printf("Graph - Warshall\n\n");
input(g);
tampilmatrikslama(g);
warshall(g);
tampilmatriksbaru(g);
printf("Masukkan asal : ");

P R A K T I K U M A L G O R I T M A D A N S T R U K T U R D A T A 2 | 16
Mei 2, 2021

scanf("%d", &asal);
printf("Masukkan tujuan : ");
scanf("%d", &tujuan);
load = ReadingRoute(asal - 1, tujuan - 1,
g);
printf("Beban : %d\n\n", load);

return 0;
}
void input(typegraph *g){
int i, j;

printf("Jumlah ordo : ");


scanf("%d", &jml_ordo);
printf("Matriks Beban (Q) :\n");
for(i = 0; i < jml_ordo; i++){
for(j = 0; j < jml_ordo; j++){
printf("Q[%d][%d] = ", i, j);
scanf("%d", &g->Q[i][j]);
fflush(stdin);
}
}
printf("\n");
printf("Matriks Jalur (P) :\n");
for(i = 0; i < jml_ordo; i++){
for(j = 0; j < jml_ordo; j++){
printf("P[%d][%d] = ", i, j);
scanf("%d", &g->P[i][j]);
fflush(stdin);
}
}
printf("\n");
printf("Matriks Rute (R) :\n");
for(i = 0; i < jml_ordo; i++){
for(j = 0; j < jml_ordo; j++){
printf("R[%d][%d] = ", i, j);
scanf("%d", &g->R[i][j]);
fflush(stdin);
}
}
printf("\n");
}
void tampilmatrikslama(typegraph *g){
int i, j;

P R A K T I K U M A L G O R I T M A D A N S T R U K T U R D A T A 3 | 16
Mei 2, 2021

printf("Matriks Q-P-R asal\n\n");


printf("Matriks Beban (Q)\n");
for(i = 0; i < jml_ordo; i++){
for(j = 0; j < jml_ordo; j++){
if(g->Q[i][j] != M)
printf("%d ", g->Q[i][j]);
else
printf("M ");
}
printf("\n");
}
printf("\nMatriks Jalur (P)\n");
for(i = 0; i < jml_ordo; i++){
for(j = 0; j < jml_ordo; j++){
if(g->P[i][j] != M)
printf("%d ", g->P[i][j]);
else
printf("M ");
}
printf("\n");
}
printf("\nMatriks Rute (R)\n");
for(i = 0; i < jml_ordo; i++){
for(j = 0; j < jml_ordo; j++){
if(g->R[i][j] != M)
printf("%d ", g->R[i][j]);
else
printf("M ");
}
printf("\n");
}
printf("\n");
}
void tampilmatriksbaru(typegraph *g){
int i, j;

printf("Matriks Q-P-R baru\n\n");


printf("Matriks Beban (Q)\n");
for(i = 0; i < jml_ordo; i++){
for(j = 0; j < jml_ordo; j++){
if(g->Q[i][j] != M)
printf("%d ", g->Q[i][j]);
else

P R A K T I K U M A L G O R I T M A D A N S T R U K T U R D A T A 4 | 16
Mei 2, 2021

printf("M ");
}
printf("\n");
}
printf("\nMatriks Jalur (P)\n");
for(i = 0; i < jml_ordo; i++){
for(j = 0; j < jml_ordo; j++){
if(g->P[i][j] != M)
printf("%d ", g->P[i][j]);
else
printf("M ");
}
printf("\n");
}
printf("\nMatriks Rute (R)\n");
for(i = 0; i < jml_ordo; i++){
for(j = 0; j < jml_ordo; j++){
if(g->R[i][j] != M)
printf("%d ", g->R[i][j]);
else
printf("M ");
}
printf("\n");
}
printf("\n");
}
void inisialisasi(stack *s){
s->count = 0;
}
void push(int x, stack *s){

s->data[s->count] = x;
++(s->count);
}
int pop(stack *s){
int temp;

temp = s->data[--s->count];

return(temp);
}
void warshall(typegraph *g){
int i, j, k;

P R A K T I K U M A L G O R I T M A D A N S T R U K T U R D A T A 5 | 16
Mei 2, 2021

for(k = 0; k < jml_ordo; k++){


for(i = 0; i < jml_ordo; i++){
for(j = 0; j < jml_ordo; j++){
if((g->Q[i][k] + g->Q[k][j]) <
g->Q[i][j]){
g->Q[i][j] = (g->Q[i][k] +
g->Q[k][j]);
if(g->R[k][j] == 0)
g->R[i][j] = k + 1;
else
g->R[i][j] = g->R[k]
[j];
}
g->P[i][j] = g->P[i][j] || (g-
>P[i][k] && g->P[k][j]);
}
}
}
}
int ReadingRoute(int origin, int destination,
typegraph *g){
int i, j, beban = 0, pop_rute[N],
jml_tumpukan;

inisialisasi(&tumpukan);
printf("Shortest route = ");
for(i = destination; i >= 0; i--){
if(g->R[origin][i] == 0){
jml_tumpukan = tumpukan.count;
printf("%d -", origin + 1);
for(j = 0; j < jml_tumpukan; j++){
pop_rute[j] = pop(&tumpukan);
printf(" %d -", pop_rute[j]);
}
printf(" %d\n\n", destination + 1);
}
else
push(g->R[origin][i], &tumpukan);
}
for(i = 0; i < jml_tumpukan - 1; i++){
beban = beban + pop_rute[i];
}
return beban;
}

P R A K T I K U M A L G O R I T M A D A N S T R U K T U R D A T A 6 | 16
Mei 2, 2021

B. Output

P R A K T I K U M A L G O R I T M A D A N S T R U K T U R D A T A 7 | 16
Mei 2, 2021

2. Graph Dinamis

A. Listing program

#include <stdio.h>
#include <stdlib.h>
#define N 16
#define M 9999
#define MAX 5

typedef struct{
int data[MAX];
int count;
} stack;
typedef struct{
int Q[N][N], P[N][N], R[N][N];
}typegraph;

void inisialisasi(stack *);


void push(int, stack *);
int pop(stack *);
void input(typegraph *);
void warshall(typegraph *);
void tampilmatrikslama(typegraph *);
void tampilmatriksbaru(typegraph *);
int ReadingRoute(int, int, typegraph *);

typegraph graph;
stack tumpukan;
int jml_ordo;

int main()
{
int asal, tujuan, load;
typegraph *g = &graph;

P R A K T I K U M A L G O R I T M A D A N S T R U K T U R D A T A 8 | 16
Mei 2, 2021

printf("Graph - Warshall (Dinamis)\n\n");


input(g);
tampilmatrikslama(g);
warshall(g);
tampilmatriksbaru(g);
printf("Masukkan asal : ");
scanf("%d", &asal);
printf("Masukkan tujuan : ");
scanf("%d", &tujuan);
load = ReadingRoute(asal - 1, tujuan - 1,
g);
printf("Beban : %d\n\n", load);

return 0;
}
void input(typegraph *g){
int i, j;

printf("Jumlah ordo : ");


scanf("%d", &jml_ordo);
printf("Matriks Beban (Q) :\n");
for(i = 0; i < jml_ordo; i++){
for(j = 0; j < jml_ordo; j++){
printf("Q[%d][%d] = ", i, j);
scanf("%d", &g->Q[i][j]);
fflush(stdin);
}
}
printf("\n");
printf("Matriks Jalur (P) :\n");
for(i = 0; i < jml_ordo; i++){
for(j = 0; j < jml_ordo; j++){
printf("P[%d][%d] = ", i, j);
scanf("%d", &g->P[i][j]);
fflush(stdin);
}
}
printf("\n");
printf("Matriks Rute (R) :\n");
for(i = 0; i < jml_ordo; i++){
for(j = 0; j < jml_ordo; j++){
printf("R[%d][%d] = ", i, j);
scanf("%d", &g->R[i][j]);

P R A K T I K U M A L G O R I T M A D A N S T R U K T U R D A T A 9 | 16
Mei 2, 2021

fflush(stdin);
}
}
printf("\n");
}
void tampilmatrikslama(typegraph *g){
int i, j;

printf("Matriks Q-P-R asal\n\n");


printf("Matriks Beban (Q)\n");
for(i = 0; i < jml_ordo; i++){
for(j = 0; j < jml_ordo; j++){
if(g->Q[i][j] != M)
printf("%d ", g->Q[i][j]);
else
printf("M ");
}
printf("\n");
}
printf("\nMatriks Jalur (P)\n");
for(i = 0; i < jml_ordo; i++){
for(j = 0; j < jml_ordo; j++){
if(g->P[i][j] != M)
printf("%d ", g->P[i][j]);
else
printf("M ");
}
printf("\n");
}
printf("\nMatriks Rute (R)\n");
for(i = 0; i < jml_ordo; i++){
for(j = 0; j < jml_ordo; j++){
if(g->R[i][j] != M)
printf("%d ", g->R[i][j]);
else
printf("M ");
}
printf("\n");
}
printf("\n");
}
void tampilmatriksbaru(typegraph *g){
int i, j;

P R A K T I K U M A L G O R I T M A D A N S T R U K T U R D A T A 10 | 16
Mei 2, 2021

printf("Matriks Q-P-R baru\n\n");


printf("Matriks Beban (Q)\n");
for(i = 0; i < jml_ordo; i++){
for(j = 0; j < jml_ordo; j++){
if(g->Q[i][j] != M)
printf("%d ", g->Q[i][j]);
else
printf("M ");
}
printf("\n");
}
printf("\nMatriks Jalur (P)\n");
for(i = 0; i < jml_ordo; i++){
for(j = 0; j < jml_ordo; j++){
if(g->P[i][j] != M)
printf("%d ", g->P[i][j]);
else
printf("M ");
}
printf("\n");
}
printf("\nMatriks Rute (R)\n");
for(i = 0; i < jml_ordo; i++){
for(j = 0; j < jml_ordo; j++){
if(g->R[i][j] != M)
printf("%d ", g->R[i][j]);
else
printf("M ");
}
printf("\n");
}
printf("\n");
}
void inisialisasi(stack *s){
s->count = 0;
}
void push(int x, stack *s){

s->data[s->count] = x;
++(s->count);
}
int pop(stack *s){
int temp;

P R A K T I K U M A L G O R I T M A D A N S T R U K T U R D A T A 11 | 16
Mei 2, 2021

temp = s->data[--s->count];

return(temp);
}
void warshall(typegraph *g){
int i, j, k;

for(k = 0; k < jml_ordo; k++){


for(i = 0; i < jml_ordo; i++){
for(j = 0; j < jml_ordo; j++){
if((g->Q[i][k] + g->Q[k][j]) <
g->Q[i][j]){
g->Q[i][j] = (g->Q[i][k] +
g->Q[k][j]);
if(g->R[k][j] == 0)
g->R[i][j] = k + 1;
else
g->R[i][j] = g->R[k]
[j];
}
g->P[i][j] = g->P[i][j] || (g-
>P[i][k] && g->P[k][j]);
}
}
}
}
int ReadingRoute(int origin, int destination,
typegraph *g){
int i, j, beban = 0, pop_rute[N],
jml_tumpukan;

inisialisasi(&tumpukan);
printf("Shortest route = ");
for(i = destination; i >= 0; i--){
if(g->R[origin][i] == 0){
jml_tumpukan = tumpukan.count;
printf("%d -", origin + 1);
for(j = 0; j < jml_tumpukan; j++){
pop_rute[j] = pop(&tumpukan);
printf(" %d -", pop_rute[j]);
}
printf(" %d\n\n", destination + 1);
}
else

P R A K T I K U M A L G O R I T M A D A N S T R U K T U R D A T A 12 | 16
Mei 2, 2021

push(g->R[origin][i], &tumpukan);
}
for(i = 0; i < jml_tumpukan - 1; i++){
beban = beban + pop_rute[i];
}
return beban;
}

B. Output

P R A K T I K U M A L G O R I T M A D A N S T R U K T U R D A T A 13 | 16
Mei 2, 2021

P R A K T I K U M A L G O R I T M A D A N S T R U K T U R D A T A 14 | 16
Mei 2, 2021

P R A K T I K U M A L G O R I T M A D A N S T R U K T U R D A T A 15 | 16
Mei 2, 2021

P R A K T I K U M A L G O R I T M A D A N S T R U K T U R D A T A 16 | 16

You might also like