Konsep graph Struktur data graph Implementasi graph dengan matriks dan linked list dalam Bahasa C

dokumen-dokumen yang mirip
Praktikum 8. Pengurutan (Sorting) Bubble Sort, Shell Sort

A. TUJUAN PEMBELAJARAN

Praktikum 7. Pengurutan (Sorting) Insertion Sort, Selection Sort POKOK BAHASAN: TUJUAN BELAJAR: DASAR TEORI:

Algoritma Dijkstra dan Bellman-Ford dalam Pencarian Jalur Terpendek

BAB II LANDASAN TEORI

BAB 2 LANDASAN TEORI

BAB II LANDASAN TEORI

Aplikasi Algoritma Dijkstra dalam Pencarian Lintasan Terpendek Graf

IKI 20100: Struktur Data & Algoritma

Algoritma dan Struktur Data. Ramos Somya, S.Kom., M.Cs.

BAB 2 LANDASAN TEORI

Kode : IF2121 NIM :... Matakuliah : Algoritma dan Struktur Data Nama :... Hari, Tanggal : Senin, 13 November 2017 Waktu : 150 Menit

Algoritma dan Struktur Data. Ramos Somya

Penggunaan Algoritma Dijkstra dalam Penentuan Lintasan Terpendek Graf

Praktikum 9. Pengurutan (Sorting) Quick Sort, Merge Sort

BAB 2 LANDASAN TEORI

BAB 2 LANDASAN TEORI

1. Memahami mengenai Konsep Graph dan istilah-istilah yang terdapat pada Graph 2. Memahami implementasi Graph ke dalam bahasa pemrograman

A. TUJUAN PEMBELAJARAN

Pencarian (Searching)

BAB 2 TINJAUAN PUSTAKA

Penerapan Graf dalam Optimasi Jalur Penerbangan Komersial dengan Floyd-Warshall Algorithm

GRAF. V3 e5. V = {v 1, v 2, v 3, v 4 } E = {e 1, e 2, e 3, e 4, e 5 } E = {(v 1,v 2 ), (v 1,v 2 ), (v 1,v 3 ), (v 2,v 3 ), (v 3,v 3 )}

Pencarian Jalur Terpendek dengan Algoritma Dijkstra

BAB III KONSEP DASAR TEORI GRAF. Teori graf adalah salah satu cabang matematika yang terus berkembang

Diktat Algoritma dan Struktur Data 2

BAB 2 LANDASAN TEORI

BAB 2 LANDASAN TEORI

Materi. Greedy algorithms MST MST TIDAK UNIK 4/29/2010. (Minimum Spanning Tree) MST MST MST. Graph MST Kruskal Prim Dijkstra.

Linked List 6.3 & 7.3 NESTED LOOP

Permodelan Pohon Merentang Minimum Dengan Menggunakan Algoritma Prim dan Algoritma Kruskal

Aplikasi Teori Graf dalam Manajemen Sistem Basis Data Tersebar

# FOUR LOOPING. JAWABAN 1. #include <stdio.h> #include <conio.h> #define pi void main(){

Representasi Graph Isomorfisme. sub-bab 8.3

Konsep. Graph adalah suatu diagram yang memuat informasi tertentu. Contoh : Struktur organisasi

BAB 2 LANDASAN TEORI. Algoritma adalah urutan atau deskripsi langkah-langkah untuk memecahkan suatu masalah.

Algoritma dan Struktur Data. Linked List

Graph, termasuk struktur non linear, yang oleh beberapa buku literatur didefinisikan sebagai berikut :

STUDI DAN IMPLEMENTASI ALGORITMA DIJKSTRA, BELLMAN-FORD DAN FLOYD-WARSHALL DALAM MENANGANI MASALAH LINTASAN TERPENDEK DALAM GRAF

Struktur. Bab 6: 4/29/2015. Kompetensi Dasar. Mahasiswa mendapatkan pemahaman mengenai cara kerja dan penyajian graph

BAB II LANDASAN TEORI

BAB I PENDAHULUAN. Di tengah masyarakat dengan aktivitas yang tinggi, mobilitas menjadi hal yang penting.

A. TUJUAN PEMBELAJARAN

BAB I PENDAHULUAN. dalam teori graf dikenal dengan masalah lintasan atau jalur terpendek (shortest

PERANCANGAN APLIKASI PENCARIAN RUTE TERPENDEK MENEMUKAN TEMPAT PARIWISATA TERDEKAT DI KEDIRI DENGAN METODE FLOYD- WARSHALL UNTUK SMARTPHONE

CRITICAL PATH. Menggunakan Graph berbobot dan mempunya arah dari Critical Path: simpul asal : 1 simpul tujuan : 5. Graph G. Alternatif

DOUBLY LINKED LIST PROGRAM : DOUBLY LINKED LIST (TAMBAH SIMPUL DI BELAKANG)

SISTEM INFORMASI UNIVERSITAS GUNADARMA 2012/2013. Graf Berarah

Algoritma dan Pemrograman. Loop control structures: WHILE. Loop control structures: WHILE Perhatikan potongan program berikut: 12/29/2011

BAB 2 LANDASAN TEORI

Algoritma Pemrograman & Struktur Data

Algoritma dan Pemrograman Pendekatan Pemrograman Modular

BAB 2 LANDASAN TEORI

LANDASAN TEORI. Bab Konsep Dasar Graf. Definisi Graf

MODUL 6 SINGLE & DOUBLE LINKED LIST

BAB IV ANALISIS PEMILIHAN ALGORITMA LINTASAN TERPENDEK DAN PENYELESAIAN KASUS RUTE PENERBANGAN DOMESTIK

PRAKTIKUM 6 PENGULANGAN PROSES 2

BAB II TINJAUAN PUSTAKA

Implementasi Graf dalam Penentuan Rute Terpendek pada Moving Object

BAB 2 TINJAUAN PUSTAKA

Graf digunakan untuk merepresentasikan objek-objek diskrit dan hubungan antara objek-objek tersebut. Demak Semarang. Kend al. Salatiga.

Graf. Program Studi Teknik Informatika FTI-ITP

BAB 2 LANDASAN TEORI

SENARAI BERANTAI (LINK LIST)

List Linier (Bag. I) IF2121/Algoritma dan Struktur Data Sem. I 2016/ /25/2017 IF2121/Sem I 2017/2018 1

PENGEMBANGAN SHORTEST PATH ALGORITHM (SPA) DALAM RANGKA PENCARIAN LINTASAN TERPENDEK PADA GRAF BERSAMBUNG BERARAH BERUNTAI

//membuat sebuah tipe data baru yang terdiri dari. //field data bertipe integer //field next merupakan pointer dari list

PENENTUAN RUTE TERPENDEK PADA OPTIMALISASI JALUR PENDISTRIBUSIAN BARANG DI PT. X DENGAN MENERAPKAN ALGORITMA FLOYD-WARSHALL

A. TUJUAN PEMBELAJARAN

INTRODUCTION TO GRAPH THEORY LECTURE 2

BAB II LANDASAN TEORI

Algoritma dan Struktur Data. Pertemuan 9 Circular Linked List

Praktikum Algoritma dan Struktur Data

ALGORITMA DJIKSTRA, BELLMAN-FORD, DAN FLOYD-WARSHALL UNTUK MENCARI RUTE TERPENDEK DARI SUATU GRAF

Algoritme dan Pemrograman

BAB 1 PENDAHULUAN. 1.1 Latar Belakang

BAB 2 TINJAUAN PUSTAKA

Struktur dan Organisasi Data 2 G R A P H

ANALISA DAN IMPLEMENTASI ALGORITMA BELLMAN FORD DALAM MNENTUKAN JALUR TERPENDEK PENGANTARAN BARANG DALAM KOTA

Penambahan Simpul (Node)

A. TUJUAN PEMBELAJARAN

BAB 2 LANDASAN TEORI

RANCANG BANGUN APLIKASI MINIMUM SPANNING TREE (MST) MENGGUNAKAN ALGORITMA KRUSKAL

Aplikasi Graf pada Penentuan Jadwal dan Jalur Penerbangan

BAB 2 LANDASAN TEORI

BAB 2 LANDASAN TEORI

Kode MK/ Matematika Diskrit

Praktikum 5. Antrian (Queue)

Implementasi Struktur Data Stack (Tumpukan) dalam Tower of Hanoi Game

Elvira Firdausi Nuzula, Purwanto, dan Lucky Tri Oktoviana Universitas Negeri Malang

Aplikasi Graf pada Persoalan Lintasan Terpendek dengan Algoritma Dijkstra

Perulangan, Percabangan, dan Studi Kasus

Aplikasi Shortest Path dengan Menggunakan Graf dalam Kehidupan Sehari-hari

PERANCANGAN ARSITEKTUR PEMARALELAN UNTUK MENCARI SHORTEST PATH DENGAN ALGORITMA DIJKSTRA

MODUL 10 Fungsi 10.1 Kompetensi 10.2 Alat Dan Bahan: 10.3 Ulasan Teori: Dasar Fungsi Deklarasi Fungsi

I. PENDAHULUAN. Bellman-Ford, Dijkstra, Floyd-Warshall, link-state routing protocol.

Sirkuit Euler & Sirkuit Hamilton SISTEM INFORMASI UNIVERSITAS GUNADARMA 2012/2013

BAB II LANDASAN TEORI

Single Linked List (1)

BAB 2 LANDASAN TEORI

Transkripsi:

Praktikum 12 Graph POKOK BAHASAN: Konsep graph Struktur data graph Implementasi graph dengan matriks dan linked list dalam Bahasa C TUJUAN BELAJAR: Setelah melakukan praktikum dalam bab ini, mahasiswa diharapkan mampu: Memahami konsep dasar graph Mengimplementasikan graph dalam bentuk matriks dan linked list. Mengimplementasikan graph untuk pencarian jalur terpendek DASAR TEORI: Sebuath graph G=<V,E> terdiri dari sekumpulan titik (nodes atau vertices) V dan sekumpulan garis (arcs atau edges) E. Sebuah garis menghubungkan dua titik u dan v; v dikatakan adjacent to u. Pada graph berarah (directed graph), setiap garis mempunyai arah dari u ke v dan dituliskan sebagai pasangan <u,v> atau u->v. Pada graph tak berarah (undirected graph), garis tidak mempunyai arah dan dituliskan sebagai pasangan u,v atau u<->v. Graph tak berarah merupakan graph berarah jika setiap garis tak berarah u,v merupakan dua garis berarah <u,v> dan <v,u>. Sebuah jalur (path) pada G adalah sekumpulan titik <v 0, v 1, v 2,, v n > sehingga <v i, v i+1 > (atau v i, v i+1 ), untuk setiap I dari 0 ke n-1 adalah garis pada G. Jalur menjadi sederhana jika tidak ada dua titik yang identik. Jalur merupakan sebuah siklus 121

PRAKTIKUM 12 GRAPH 122 jika v 0 =v n. Jalur merupakan siklus yang sederhana jika v 0 =v n dan tidak ada dua titik yang identik. Graph banyak digunakan untuk menggambarkan jaringan dan peta jalan, jalan kereta api, lintasan pesawat, system perpipaan, saluran telepon, koneksi elektrik, ketergantungan diantara task pada sistem manufaktur dan lain-lain. Terdapat banyak hasil dan struktur penting yang didapatkan dari perhitungan dengan graph. 1. GRAPH DENGAN MATRIK ADJACENCY Sebuah graph G= dapat direpresentasikan dengan matrik adjacency A sebagai V * V. Jika G berarah, A ij = true jika dan hanya jika <v i, v j > berada pada E. Terdapat paling banyak V 2 garis pada E. Gambar 12.1 Graph berarah Matriks adjacency dari Graph berarah adalah sebagai berikut : 1 2 3 4 5 6 1 T 2 T 3 T 4 T T T 5 T T T 6 T Jika G adalah graph tak berarah, A ij =A ji =true jika v i,v j berada pada E dan A ij =A ji =false apabila G adalah graph berarah.

PRAKTIKUM 12 GRAPH 123 Gambar 12.2 Graph tak berarah Matriks adjacency dari Graph berarah adalah sebagai berikut : 1 2 3 4 5 6 1 T T T 2 T T T T 3 T T 4 T T T T 5 T T T 6 T T Pada graph tak berarah, matriks adjacency dapat berupa matriks segitiga atas sebagai berikut : 1 2 3 4 5 6 1 T T T 2 T T T 3 T 4 T 5 T 6 Baik graph berarah maupun tak berarah dapat diberikan pembobot (weight). Pembobot diberikan untuk setiap garis. Hal ini biasanya digunakan untuk menggambarkan jarak antara dua kota, waktu penerbangan, harga tiket, kapasitas elektrik suatu kabel atau ukuran lain yang berhubungan dengan garis. Pembobot biasanya disebut panjang garis, khususnya jika graph menggambarkan peta. Pembobot atau panjang dari suatu jalur atau siklus merupakan penjumlahan pembobot atau panjang dari komponen garis.

PRAKTIKUM 12 GRAPH 124 Gambar 12.3 Graph berarah dengan pembobot Matriks adjacency dari graph dengan pembobot dapat digunakan untuk menyimpan pembobot dari setiap garis. Jika garis kehilangan nilai, kemungkinan nilai negative, nol atau bilangan besar menunjukkan nilai yang tak terbatas (infinity). Matriks adjacency pada graph berarah dengan pembobot adalah sebagai berikut : 1 2 3 4 5 6 1 4 2 4 3 3 4 3 2 3 5 4 5 1 6 5 Gambar 12.4 Graph tak berarah dengan pembobot Matriks adjacency pada graph tak berarah dengan pembobot adalah sebagai berikut :

PRAKTIKUM 12 GRAPH 125 1 2 3 4 5 6 1 4 3 5 2 4 3 4 4 3 3 2 4 3 4 2 3 5 4 3 1 6 5 1 Atau berupa matriks segitiga atas sebagai berikut : 1 2 3 4 5 6 1 4 3 5 2 3 4 4 3 2 4 3 5 1 6 Sebuah graph dikatakan lengkap jika semua kemungkinan garis direpresentasikan. Sebuah graph dikatakan padat jika hamper semua garis digunakan. Dikatakan jarang jika sebagian besar garis tidak digunakan dimana E << V 2. Matriks adjacency sangat efisien untuk graph yang padat dan tidak efisien untuk graph yang jarang karena sebagian besar tidak terdapat garis. Oleh karena itu matriks adjacency menggunakan linked list tidak digunakan untuk graph yang jarang. 2. GRAPH DENGAN LIST ADJACENCY Pada graph berarah maupun graph tak berarah kemungkinan kehilangan garis dapat disimpan dengan menggunakan linked list yang biasanya disebut list adjacency. Misalnya pada graph berarah dengan pembobot pada Gambar 12.3, garis <v i,v j > ditempatkan pada linked list yang berhubungan dengan v i. Garis direpresentasikan dengan titik tujuan v j dan pembobot. List adjacency untuk graph berarah dengan pembobot adalah sebagai berikut : 1:--------->2,4:nil 2:--------->4,4:nil 3:--------->2,3:nil 4:--------->1,3:----->3,2:----->5,3:nil 5:--------->4,5:----->6,1:nil 6:--------->1,5:nil

PRAKTIKUM 12 GRAPH 126 Sedangkan pada graph tak berarah dengan pembobot seperti pada Gambar 12.4, list adjacency adalah sebagai berikut : 1:--------->2,4:----->4,3:----->6,5:nil 2:--------->1,4:-----:3,3:----->4,4:----->5,4:nil 3:--------->2,3:----->4,2:nil 4:--------->1,3:----->2,4:----->3,2:----->5,3:nil 5:--------->2,4:----->4,3:----->6,1:nil 6:--------->1,5:----->5,1:nil Pada graph tak berarah, separuh bagian dapat disimpan hanya dengan menyimpan v i,v j untuk i>=j sebagai berikut : 1:--------->2,4:----->4,3:----->6,5:nil 2:--------->3,3:----->4,4:----->5,4:nil 3:--------->4,2:nil 4:--------->5,3:nil 5:--------->6,1:nil 6:nil List adjacency dapat didefinisikan menggunakan struktur dan pointer. 3. SINGLE SOURCE SHORTEST PATHS PADA GRAPH BERARAH Pembobot garis pada graph berarah biasanya disebut panjang jalur. Panjang jalur <v 0, v 1,..., v n > adalah penjumlahan panjang dari semua komponen garis <v i,v i+1 >. Sebagai contoh dari permasalahan jalur, dinas pemadam kebakaran menyimpan peta kota yang ditandai dengan lokasi rawan kebakaran seperti took kimia. Mereka ingin mengetahui rute terpendek dari kantor pemadam kebakaran ke masing-masing daerah tersebut. Sebagai catatan, panjang jalan berupa panjang fisik atau waktu estimasi perjalanan tetapi tidak keduanya. Untuk menemukan jalur terpendek dari satu sumber ke semua titik dengan menemukan jalur terpendek antara beberapa dua titik. Biasanya sumber disebut v 1. Algoritma Dijkstra dapat digunakan untuk memecahkan permasalahan single-source shortest paths problem. Algoritma ini bekerja dengan menambahkan besarnya himpunan titik yang sukses dimana jalur terpendek dari sumber diketahui.. Mula-mula sukses hanya berisi sumber v 1. Titik yang sedang tidak berada pada himpunan sukses ternyata terdekat dengan sumber ditemukan maka ditambahkan pada

PRAKTIKUM 12 GRAPH 127 himpunan tersebut. Modifikasi himpunan dilakukan terus-menerus sampai berisi semua titik. Algoritma Dijkstra untuk Single-Source Shortest Paths adalah sebagai berikut : -- Graph G = <V, E> -- P[i] adalah panjang jalur dari sumber ke titik i done := v 1 for vertex i in V-1 P[i] := E[1,i] end for --garis berarah loop V -1 times find closest vertex to v 1 in V - done done +:= closest for vertex j in V - done P[j]:=min(P[j], --update jalur terpendek, P[closest]+E[closest,j]) end for end loop P merupakan garis langsung dari sumber. Pada iterasi pertama dari loop utama, titik dengan koneksi langsung yang terpendek dari sumber dipilih. Hal ini dapat dibenarkan karena sembarang jalur tak langsung ke titik ini merupakan garis yang terpanjang dari sumber. Bila suatu titik terdekat dipilih dan ditambahkan ke himpunan sukses, berarti merupakan jalur terpendek dari sumber, terdekat, daripada titik yang tak terpilih lain. TUGAS PENDAHULUAN: 1. Perhatikan graph berarah pada Gambar 12.5. Buatlah matriks adjacency dan list adjacency nya 2. Perhatikan graph tak berarah pada Gambar 12.6. Buatlah matriks adjacency dan list adjacency nya.

PRAKTIKUM 12 GRAPH 128 10 2 3 6 1 5 2 3 9 2 4 5 4 7 Gambar 12.5 Graph berarah untuk Tugas 1 1 2 4 3 5 9 7 3 2 5 3 4 Gambar 126 Graph tak berarah untuk Tugas 2 3. Buatlah flowchart untuk pencarian jalur terpendek Single-Source Shortest Path pada graph berarah Gambar 12.3 dengan algoritma Dijkstra menggunakan matriks. PERCOBAAN: 1. Buatlah workspace menggunakan Visual C++. 2. Buatlah project baru GRAPH. 3. Cobalah untuk masing-masing percobaan di bawah dengan nama source yang berbeda.

PRAKTIKUM 12 GRAPH 129 Percobaan 1 : Implementasi matriks adjacency pada graph berarah dengan pembobot #include <stdio.h> #include <stdlib.h> #define N 6 int Vertex[N] = 1,2,3,4,5,6; int Edge[N][N] = 0,4,0,0,0,0, 0,0,0,4,0,0, 0,3,0,0,0,0, 3,0,2,0,3,0, 0,4,0,5,0,1, 5,0,0,0,0,0; typedef struct int V[N]; int E[N][N]; GraphB; void Jalur(GraphB G) int i, j; printf("daftar Garis (Edge) : \n"); for(i=0; i<n; i++) for(j=0; j<n; j++) if(g.e[i][j]>0) printf("(%d, %d) = %d\n", G.V[i], G.V[j], G.E[i][j]); void DataGraph(GraphB *G) int i, j; for (i=0; i<n; i++) G->V[i] = Vertex[i]; for (i=0; i<n; i++) for(j=0; j<n; j++) G->E[i][j] = Edge[i][j];

PRAKTIKUM 12 GRAPH 130 void DataGraphRand(GraphB *G) int i,j; for (i=0; i<n; i++) G->V[i] = Vertex[i]; srand(0); for (i=0; i<n; i++) for(j=0; j<n; j++) G->E[i][j] = rand()/10000*3; void main() GraphB G, GRand; DataGraph(&G); Jalur(G); DataGraphRand(&GRand); Jalur(GRand); Percobaan 2 : Implementasi matriks adjacency pada graph tak berarah dengan pembobot #include <stdio.h> #include <stdlib.h> #define N 6 int Vertex[N] = 1,2,3,4,5,6; int Edge[N][N] = 0,4,0,3,0,5, 0,0,3,4,4,0, 0,0,0,2,0,0, 0,0,0,0,3,0, 0,0,0,0,0,1, 0,0,0,0,0,0; typedef struct int V[N]; int E[N][N]; GraphTB;

PRAKTIKUM 12 GRAPH 131 void Jalur(GraphTB G) int i, j; printf("daftar Garis (Edge) : \n"); for(i=0; i<n; i++) for(j=i+1; j<n; j++) if(g.e[i][j]>0) printf("(%d, %d) = %d\n", G.V[i], G.V[j], G.E[i][j]); void DataGraph(GraphTB *G) int i, j; for (i=0; i<n; i++) G->V[i] = Vertex[i]; for (i=0; i<n; i++) for(j=i+1; j<n; j++) G->E[i][j] = Edge[i][j]; void DataGraphRand(GraphTB *G) int i,j; for (i=0; i<n; i++) G->V[i] = Vertex[i]; srand(0); for (i=0; i<n; i++) for(j=i+1; j<n; j++) G->E[i][j] = rand()/10000*3; void main() GraphTB G, GRand; DataGraph(&G); Jalur(G); DataGraphRand(&GRand); Jalur(GRand);

PRAKTIKUM 12 GRAPH 132 Percobaan 3 : Implementasi list adjacency pada graph berarah dengan pembobot #include <stdio.h> #include <stdlib.h> #include <malloc.h> #define N 6 int Vertex[N] = 1,2,3,4,5,6; int Garis[N][N] = 0,4,0,0,0,0, 0,0,0,4,0,0, 0,3,0,0,0,0, 3,0,2,0,3,0, 0,4,0,5,0,1, 5,0,0,0,0,0; typedef struct edge int bobot; int VTujuan; struct edge *next; Edge; typedef struct int V[N]; Edge *EFront, *ERear; GraphB; void Jalur(GraphB *G, int i) printf("\n%d : ", G->V[i]); while(g->efront!= NULL) printf("-----> %d, %d : ", G->EFront->bobot, G->EFront->VTujuan); G->EFront = G->EFront->next;

PRAKTIKUM 12 GRAPH 133 void DataGraph(GraphB *G, int i) int j; Edge *ptr; for (j=0; j<n; j++) G->V[j] = Vertex[j]; for(j=0; j<n; j++) if (Garis[i][j]>0) ptr=(edge *) malloc (sizeof(edge)); ptr->bobot = Garis[i][j]; ptr->vtujuan = G->V[j]; ptr->next = NULL; if(g->efront == NULL) G->EFront = G->ERear =ptr; else G->ERear->next = ptr; G->ERear = ptr; void DataGraphRand(GraphB *G, int i) int j; Edge *ptr; int BilRand; for (j=0; j<n; j++) G->V[j] = Vertex[j]; for(j=0; j<n; j++) BilRand = rand()/10000; if (BilRand>0) ptr=(edge *) malloc (sizeof(edge)); ptr->bobot = BilRand; ptr->vtujuan = G->V[j]; ptr->next = NULL;

PRAKTIKUM 12 GRAPH 134 if(g->efront == NULL) G->EFront = G->ERear =ptr; else G->ERear->next = ptr; G->ERear = ptr; void main() GraphB G[N], GRand[N]; int i; srand(0); printf("\ndaftar Garis (Edge) : \n"); for(i=0; i<n; i++) G[i].EFront=NULL; DataGraph(&G[i], i); Jalur(&G[i], i); for(i=0; i<n; i++) GRand[i].EFront=NULL; DataGraphRand(&GRand[i], i); Jalur(&GRand[i], i); Percobaan 4 : Implementasi list adjacency pada graph tak berarah dengan pembobot #include <stdio.h> #include <stdlib.h> #include <malloc.h> #define N 6 int Vertex[N] = 1,2,3,4,5,6;

PRAKTIKUM 12 GRAPH 135 int Garis[N][N] = 0,4,0,3,0,5, 0,0,3,4,4,0, 0,0,0,2,0,0, 0,0,0,0,3,0, 0,0,0,0,0,1, 0,0,0,0,0,0; typedef struct edge int bobot; int VTujuan; struct edge *next; Edge; typedef struct int V[N]; Edge *EFront, *ERear; GraphTB; void Jalur(GraphTB *G, int i) printf("\n%d : ", G->V[i]); while(g->efront!= NULL) printf("-----> %d, %d : ", G->EFront->bobot, G->EFront->VTujuan); G->EFront = G->EFront->next; void DataGraph(GraphTB *G, int i) int j; Edge *ptr; for (j=0; j<n; j++) G->V[j] = Vertex[j]; for(j=i+1; j<n; j++) if (Garis[i][j]>0) ptr=(edge *) malloc (sizeof(edge)); ptr->bobot = Garis[i][j]; ptr->vtujuan = G->V[j]; ptr->next = NULL;

PRAKTIKUM 12 GRAPH 136 if(g->efront == NULL) G->EFront = G->ERear =ptr; else G->ERear->next = ptr; G->ERear = ptr; void DataGraphRand(GraphTB *G, int i) int j; Edge *ptr; int BilRand; for (j=0; j<n; j++) G->V[j] = Vertex[j]; for(j=i+1; j<n; j++) BilRand = rand()/10000; if (BilRand>0) ptr=(edge *) malloc (sizeof(edge)); ptr->bobot = BilRand; ptr->vtujuan = G->V[j]; ptr->next = NULL; if(g->efront == NULL) G->EFront = G->ERear =ptr; else G->ERear->next = ptr; G->ERear = ptr;

PRAKTIKUM 12 GRAPH 137 void main() GraphTB G[N], GRand[N]; int i; srand(0); printf("\ndaftar Garis (Edge) : \n"); for(i=0; i<n; i++) G[i].EFront=NULL; DataGraph(&G[i], i); Jalur(&G[i], i); for(i=0; i<n; i++) GRand[i].EFront=NULL; DataGraphRand(&GRand[i], i); Jalur(&GRand[i], i); LATIHAN: 1. Implementasi Tugas Pendahuluan no 1 dengan menampilkan jalur yang ada. 2. Implementasi Tugas Pendahuluan no 2 dengan menampilkan jalur yang ada. 3. Tambahkan kode program untuk memasukkan input titik dan garis dari graph. 4. Implementasikan pencarian jalur terpendek Single-Source Shortest Path dengan algoritma Dijkstra menggunakan matriks pada Tugas Pendahuluan no. 3. 5. Berikan kesimpulan dari percobaan dan latihan yang telah Anda lakukan.