Algoritma Dijkstra digunakan untuk menentukan lintasan terpendek antar kota dengan mempertimbangkan tingkat kemacetan. Program menginput titik sumber dan tujuan, menghitung panjang lintasan terpendek dan rute yang dilalui menggunakan matriks sisi dan titik terdekat. Hasilnya berupa rute optimal beserta panjangnya.
1. Implementasi algoritma djikstra dalam aplikasi untuk
menentukan lintasan terpendek jalan darat antar kota
serta mencari solusi kemacetan
ALGORITMA DAN STRUKTUR DATA
2. Nama KELOMPOK :
1.Ekky Kharismadhany
2.Lusiana Diyan Ningrum
3.M. Iqbal Alfarabi
4.M. Hafidz
3. Latar belakang masalah
Untuk menuju ke suatu tempat atau kota tujuan dapat ditempuh melalui
beberapa lintasan, selain itu dengan mempertimbangkan tingkat kemacetan
dari setiap jalur lintasan maupun pertimbangan lainnya dalam menentukan
pilihan jalur yang akan dilalui. Dalam menentukan lintasan terpendek dan
meminimalisir tingkat kemacetan dapat diperoleh dengan beberapa
algoritma matematika yang mana dalam hal ini kami memilih algoritma
djikstra dalam sistem ini. Algoritma ini bertujuan untuk menemukan
lintasan terpendek berdasarkan bobot terkecil dari satu titik ke titik lainnya
berdasarkan bobot terkecil.
5. PROGRAM
INPUT TITIK SUMBER
int titik_sumber;
cout << "Input titik sumber : ";
cin >> titik_sumber;
system("CLS");
int titik_Tujuan;
cout << "Input titik yang ingin
dicari lintasan terpendeknya : ";
cin >> titik_Tujuan;
system("PAUSE");
system("CLS");
DEKLARASI VARIABEL TOTAL LINTASAN TERPENDEK
int Ltp[n_titik];
DEKLARASI VARIABEL TITIK YANG SUDAH DIJADIKAN
TITIK TINJAU DAN DEKLARASI VARIABEL TITIK
TERDEKAT KE SEBUAH TIITK
int titik_terminal[n_titik],
titik_terdekat[n_titik];
DEKLARASI VARIABEL INDEKS TITIK_TERMINAL
int indeks_arrayTerminal;
6. PROGRAM
DEKLARASI VARIABEL TITIK TINJAU
YANG MENYIMPAN NILAI TITIK TINJAU
DI SETIAP TAHAP
int titik_tinjau;
variabel macet_terhindarkan
digunakan sebagai acuan apakah
titik kemacetan dapat dihindari
(bernilai 1) atau tidak (0)
int macet_terhindarkan = 1;
ulang:
if (macet_terhindarkan == 0)
{
for (int i = 1; i <= n_sisi; i++)
{
matriks_sisi[i - 1][0] =
matriks_sisiAsli[i - 1][0];
matriks_sisi[i - 1][1] =
matriks_sisiAsli[i - 1][1];
matriks_sisi[i - 1][2] =
matriks_sisiAsli[i - 1][2];
matriks_sisi[i - 1][3] =
matriks_sisiAsli[i - 1][3];
}
}
for (int i = 1; i <= n_titik; i++)
{
if (i - 1 == titik_sumber - 1)
Ltp[i - 1] = 0;
else
Ltp[i - 1] = 9999;
}
7. PROGRAM
INISIALISASI NILAI AWAL VARIABEL TITIK TERMINAL DAN TITIK TERDEKAT
for (int i = 0; i < n_titik; i++)
titik_terminal[i] = 0, titik_terdekat[i] =
0;
INISIALISASI NILAI AWAL VARIABEL TITIK TINJAU DAN INDEKSNYA
titik_tinjau = titik_sumber;
indeks_arrayTerminal = 0;
8. PROGRAM
PERULANGAN INI UNTUK MENCARI SETIAP TITIK YANG ADJACENT DENGAN TITIK TINJAU DAN MENYIMPAN
NILAI TITIK TERDEKAT, LINTASAN TERPENDEKNYA
for (int i = 0; i < n_sisi; i++)
{
int bobot_sisi;
if (matriks_sisi[i][3] == 0)
mencari titik tinjau di kolom 1st matriks sisi
if (matriks_sisi[i][0] == titik_tinjau)
{
int titik_adjacent = matriks_sisi[i][1];
bobot_sisi = matriks_sisi[i][2];
if (Ltp[titik_adjacent - 1] > Ltp[titik_tinjau - 1] +
bobot_sisi)
{
Ltp[titik_adjacent - 1] = Ltp[titik_tinjau - 1] +
bobot_sisi;
titik_terdekat[titik_adjacent - 1] = titik_tinjau;
9. PROGRAM
PROGRAM MENGURUTKAN LINTASAN DARI TITIK SUMBER KE TITIK TUJUAN
int titik, titikSort[150], i = 0;
titik = titik_Tujuan;
int banyakTitikDilalui = 0;
if (Ltp[titik_Tujuan - 1] != 9999)
{
while (titik != 0)
{
titikSort[i++] = titik;
titik = titik_terdekat[titik - 1];
banyakTitikDilalui++;
}
int temp1 = 0, temp2 = banyakTitikDilalui - 1, temp3;
while (temp1 < banyakTitikDilalui / 2)
{
temp3 = titikSort[temp1];
titikSort[temp1++] = titikSort[temp2];
titikSort[temp2] = temp3;
temp2--;
}
10. PROGRAM
MENAMPILKAN LINTASAN DARI TITIK SUMBER MENUJU TITIK TUJUAN
cout << "Rute efektif menuju titik " << titik_Tujuan;
cout << " adalah sebagai berikut : n";
for (int i = 0; i < banyakTitikDilalui; i++)
{
cout << titikSort[i];
if (i != banyakTitikDilalui - 1)
cout << " - ";
}
cout << endl;
cout << "bPanjang rute tersebut adalah sejauh " << Ltp[titik_Tujuan -
1];
cout << " m";