Anda di halaman 1dari 4

Praktikum 14

Shortest Path Problem


NIM/Nama : 3312011058/Miranda
Setelah mengikuti praktikum ini, mahasiswa diharapkan dapat:
 Membuat struktur graf
 Mencari lintasan terpendek pada graf
 Mengaplikasikan graf pada program

Buka kembali slide teori minggu 14 mengenai Shortest Path Problem. Representasikan graf
pada contoh dalam slide tersebut ke dalam adjacency matrix. Salin kode C yang membentuk
matrix tersebut di sini.
#include <stdio.h>
#include <stdlib.h>
#define INF 999
int main()
{
int n,i,j,start;
printf("Masukan Jumlah Simpul : ");
scanf("%d",&n);
int G[n][n],tempGraf[n][n],jarak[n],visit[n],temp[n],count;
printf("Masukan Matrix Graf : \n");
for(i = 0;i < n ;i++)
{
for (j=0;j<n;j++)
{
scanf("%d",&G[i][j]);
}
}

Berdasarkan langkah-langkah yang telah dijelaskan di slide teori, buatlah program yang dapat
menentukan lintasan terpendek dari simpul satu ke simpul yang lain.
Salin kode C Anda di sini.
#include <stdio.h>
#include <stdlib.h>
#define INF 999
int main()
{
int n,i,j,start;
printf("Masukan Jumlah Simpul : ");
scanf("%d",&n);
int G[n][n],tempGraf[n][n],jarak[n],visit[n],temp[n],count;
printf("Masukan Matrix Graf : \n");

~1~
for(i = 0;i < n ;i++)
{
for (j=0;j<n;j++)
{
scanf("%d",&G[i][j]);
}
}
printf("Masukan Simpul Asal : ");
scanf ("%d",&start);

for(i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
if (G[i][j] == 0)
{
tempGraf[i][j] = INF;
}
else{
tempGraf[i][j] = G[i][j];
}
}
}
for (i = 0;i<n;i++)
{
jarak[i] = tempGraf[start][i];
temp[i] = start;
visit[i] = 0;
}
jarak[start] = 0;
visit[start] = 1;

count =1; //dimulai dari 1 karena kita tidak akan menghitung Simpul asal lagi

//proses untuk menghitung Simpul yang dikunjungi


int jarakmin,nextSimpul;
while (count < n-1)
{
jarakmin = INF;
for (i=0;i<n;i++)
{
//jika jarak lebih kecil dari jarak minimum dan Simpul belum dikunjungi
// maka jarak minimum adalah jarak yang sudah dibandingkan sebelumnya dengan
jarakmin
if(jarak[i] < jarakmin && visit[i]!=1)
{
jarakmin = jarak[i];
nextSimpul = i; //untuk memberikan Simpul pada jarak minimum
}
}

~2~
// untuk mengecek Simpul selanjutnya yang terhubung dengan Simpul lain yang
memiliki jarak minimum
visit[nextSimpul] = 1;
for(i = 0;i<n;i++)
{
if(visit[i]!=1)
{
if(jarakmin+tempGraf[nextSimpul][i]<jarak[i])
{
jarak[i] = jarakmin+tempGraf[nextSimpul][i];
temp[i] = nextSimpul;
}
}
}
count++;
}
//nenampilkan jalur dan jarak untuk setiap Simpul
int a[n+1],k;
for (i = 0; i < n ;i++)
{
if(i!=start)
{
printf ("\nHasil jarak untuk Simpul ke-%d adalah %d\n",i,jarak[i]);

j=i;
printf ("%d<-",i);
while(j!=start)
{
j=temp[j];
printf ("%d",j);
if(j!=start)
{
printf ("<-");
}

}
}
return 0;
}
Tampil dan jelaskan hasil running di sini.

~3~
Pada gambar diatas adalah keluaran/hasil output dari program yang dibuat.
Jarak dari simpul asal ke simpul tujuan ditunjukkan sesuai dengan indeks pada array yang
digunakan untuk merepresentasikan matrix graf.
Angka yang ditunjukkan pada program diatas merupakan indeks dari simpulnya.

~4~

Anda mungkin juga menyukai