You are on page 1of 11

Jobsheet 5

1. Latihan 1
a. Flowchart

b. Program
#include <stdio.h>
#include <conio.h>
int graph[8][8] = {
{ 0, 8, 6,999,999,999,999,999},
{ 8, 0,999,999, 2,999,999,999},
{ 6,999, 0, 4,999,999,999,999},
{999,999, 4, 0, 3, 9,999, 8},
{999, 2,999, 3, 0, 9,999,999},
{999,999,999, 9, 9, 0, 2,999},
{999,999,999,999,999, 2, 0, 2},
{999,999,999, 8,999,999, 2, 0}};
int i, k, top;
int start, goal;
int member=1, nonmember=0;
int status[8], cost[8], path[8], Rute[8];
int cur, small, dc;
int jarakbaru;
int system;

void Lintasan() {
// --- Pencarian Rute ---
cur = goal;
Rute[top] = cur;
while(cur != start) {
cur = path[cur];
top++;
Rute[top] = cur;
}

// --- Tampilkan Rute ---


for(i=top; i>0; i--)
printf("%d-", Rute[i]);
printf("%d", Rute[0]);
}

void Dijkstra() {
// --- Insialisasi Keadaan Awal ---
for(i=0; i<8; i++) {
status[i] = nonmember;
cost[i] = 999;
status[start] = member;
cost[start] = 0;
cur = start;
}

// --- Pencarian Lintasan Terpendek ---


while(cur != goal) {
small = 999;
dc = cost[cur];
for(i=0; i<8; i++) {
if(status[i] == nonmember) {
jarakbaru = dc + graph[cur][i];
if(jarakbaru < cost[i]) {
cost[i] = jarakbaru;
path[i] = cur;
}

if (cost[i] < small) {


small = cost[i];
k = i;
}
}
}
cur = k;
status[cur] = member;
}
}

void Identitas();

int main() {
//system("color F0");
printf("*** OPERASI SEARCHING ***\n");
printf("\tDJIKSTRA\n\n\n");

// --- Penetapan Simpul ---


printf("Simpul asal (0-7) : ");
scanf("%i", &start);
printf("Simpul tujuan (0-7) : ");
scanf("%i", &goal);
Dijkstra();

// --- Jarak Lintasan Terpendek ---


printf("\nJarak terpendek dari node %i menuju node %i ",
start, goal);
printf("adalah %i\n", cost[goal]);
printf("Simpul yang dilewati : ");
Lintasan();

return 0;
}
c. Hasil

2. Latihan 2
a. Flowchart
b. Program
#include <stdio.h>
#include <conio.h>

int graph[8][8] = {
{ 0, 8, 6,999,999,999,999,999},
{ 8, 0,999,999, 2,999,999,999},
{ 6,999, 0, 4,999,999,999,999},
{999,999, 4, 0, 3, 9,999, 8},
{999, 2,999, 3, 0, 9,999,999},
{999,999,999, 9, 9, 0, 2,999},
{999,999,999,999,999, 2, 0, 2},
{999,999,999, 8,999,999, 2, 0}};
int heuristik[8] = {50,30,60,40,70,50,50, 0};
int i, k;
int start, goal;
int member=1, nonmember=0;
int status[8], cost[8], path[8];
int cur, small, dc;
int jarakbaru;

void AStar() {
// --- Insialisasi Keadaan Awal ---
for(i=0; i<8; i++) {
status[i] = nonmember;
cost[i] = 999;
status[start] = member;
cost[start] = 0;
cur = start;
}

// --- Pencarian Lintasan Terpendek ---


while(cur != goal) {
small = 999;
dc = cost[cur];
for(i=0; i<8; i++) {
if(status[i] == nonmember) {
jarakbaru = dc + graph[cur][i] +
heuristik[i];
if(jarakbaru < cost[i]) {
cost[i] = jarakbaru;
path[i] = cur;
}

if (cost[i] < small) {


small = cost[i];
k = i;
}
}
}
cur = k;
status[cur] = member;
}
}

void Lintasan() {
int z, jarak=0;
cur = goal;
while(cur!=start) {
z = path[cur];
jarak += graph[cur][z];
cur = path[cur];
}
printf("%d", jarak);
}

void Identitas();

int main() {
//system("color F0");
printf("*** OPERASI SEARCHING ***\n");
printf(" A* (A STAR)\n\n\n");

// --- Penetapan Simpul ---


printf("Simpul asal (0-7) : ");
scanf("%i", &start);
printf("Simpul tujuan (0-7) : ");
scanf("%i", &goal);
AStar();

// --- Jarak Lintasan Terpendek ---


printf("\nJarak terpendek dari node %i menuju node %i
adalah ", start, goal);
Lintasan();
printf("\n\n\n\n EXIT!!!\n\n");

return 0;
}

c. Hasil
1. Matriks

2. Tabel Vertex
a. Inisialisai awal
Vertex Known Cost Path
0 F Inf -1
1 F Inf -1
2 F Inf -1
3 F Inf -1
4 F Inf -1
5 F Inf -1
6 F Inf -1
7 F Inf -1
b. Start dari vertex 0
Vertex Known Cost Path
0 T 0 -1
1 F 8 0
2 F 6 0
3 F Inf -1
4 F Inf -1
5 F Inf -1
6 F Inf -1
7 F Inf -1

c. Start dari vertex 1


Vertex Known Cost Path
0 T 0 -1 8+8<0
1 F 8 0
2 T 6 0
3 F Inf -1
4 F 10 1 8+2<Inf
5 F Inf -1
6 F Inf -1
7 F Inf -1

d. Start dari vertex 2


Vertex Known Cost Path
0 T 0 -1 6+6<0
1 T 8 0
2 T 6 0
3 F 10 2 6+4<Inf
4 F 10 1
5 F Inf -1
6 F Inf -1
7 F Inf -1

e. Start dari vertex 3


Vertex Known Cost Path
0 T 0 -1
1 T 8 0
2 T 6 0 10+4<6
3 T 10 2
4 F 10 1 10+3<10
5 F 19 3 10+9<Inf
6 F Inf -1
7 F 18 3 10+8<Inf

f. Start dari vertex 4


Vertex Known Cost Path
0 T 0 -1
1 T 8 0 12<8
2 T 6 0
3 T 10 2 13<10
4 T 10 1
5 F 19 3 19<19
6 F Inf -1
7 F 18 3

g. Start dari vertex 5


Vertex Known Cost Path
0 T 0 -1
1 T 8 0
2 T 6 0
3 T 10 2 19+9<10
4 T 10 1 19+9<10
5 F 19 3
6 F 21 5 19+2<Inf
7 T 18 3

a. Start dari vertex 6


Vertex Known Cost Path
0 T 0 -1
1 T 8 0
2 T 6 0
3 T 10 2
4 T 10 1
5 T 19 3 21+2<19
6 F 21 5
7 T 18 3 21+2<18

b. Start dari vertex 7


Vertex Known Cost Path
0 T 0 -1
1 T 8 0
2 T 6 0
3 T 10 2 18+8<10
4 T 10 1
5 T 19 3
6 T 20 7 18+2<21
7 T 18 3

Kesimpulan :

 Metode Dijkstra bekerja dengan mencari bobot terkecil dalam suatu graph
berbobot yang diperoleh dengan cara menjumlahkan simpul-simpul yang
dilewati dalam proses penelusuran
 Untuk metode Algoritma A star, berkerja dengan mencari bobot terkecil
dalam suatu graph berbobot yang diperoleh dengan cara menjumlhkan simpul-
simpul yang dilewati dengan fungsi heuristic yang didapat dalam proses
penelusuran.
 Fungsi heuristic berisi biaya perkiraan dari start node ke goal node yang
nantinya akan digunakan dalam perhitungan pada metode Algoritma A star.
 Dengan menentukan Start dan Goal proses pencarian rute terpendek dapat
ditemukan dengan adanya informasi yang telah didapatkan

You might also like