Tuesday, June 29, 2010

Djkstra Algoritmhs

<html>
<head><title>Dijkstra Algorithms</title></head>
<body>
<script language = "javascript">
<!--
var nilaiacuan = 10000;
var takterdefinisi = -1;
var namaverteks = new Array('A', 'B', 'C', 'D', 'E', 'F');
var matriks = new Array(6);

function bobot(a,b)
{
 return matriks[a][b];
}

function dijkstra(jumlahverteks,awal,d) //panjang matriks, dari, ke
{
 var posisi = new Array(jumlahverteks);
 var i;
 var kunjungan = new Array(jumlahverteks);
 var sebelum = new Array(jumlahverteks);

 for (i=0; i<jumlahverteks; i++)
 {
  posisi[i] = nilaiacuan;
  sebelum[i] = takterdefinisi;
  kunjungan[i] = false;
 }

 posisi[awal] = 0;

 var verteks;
 for (verteks=0; verteks<jumlahverteks; verteks++)
 {
  var jarakterpendek = nilaiacuan;
  var berhenti = -1;
  for (i=0; i<jumlahverteks; i++)
  {
   if (!kunjungan[i])
   {
    if (posisi[i] <= jarakterpendek)
    {
     jarakterpendek = posisi[i];
     berhenti = i;
    }
   }
  }
  kunjungan[berhenti] = true;
  for (i=0; i<jumlahverteks; i++)
  {
   if (!kunjungan[i])
   {
    var w = bobot(berhenti, i);
    if (posisi[berhenti]+w < posisi[i])
    {
     posisi[i] = posisi[berhenti] + w;
     sebelum[i] = berhenti;
    }
   }
  }
 }

 i = d;
 if (posisi[i] < nilaiacuan)
  {
   var lintasan = namaverteks[i];
   var verteks = i;
   while (verteks>0)
   {
    verteks = sebelum[verteks];
    if (verteks >= 0)
     lintasan = namaverteks[verteks] + "->" + lintasan;
   }
   alert ("Jarak terpendek dari " +namaverteks[dari]+ " ke " +namaverteks[d]+ " : " + posisi[i] + " (" + lintasan + ")");
  }
 else
  {
   alert ("Tidak ada jalur");
  }
}

function init()
{
 var x = '~';           

 document.write('<pre>');
 document.write("  A B C D E F" + '<br>');                      
 document.write('A ' + (matriks[0]=new Array(0,2,3,x,x,x)) + '<br>');   
 document.write('B ' + (matriks[1]=new Array(2,0,3,6,x,x)) + '<br>');          
 document.write('C ' + (matriks[2]=new Array(3,3,0,3,5,x)) + '<br>');          
 document.write('D ' + (matriks[3]=new Array(x,6,3,0,1,3)) + '<br>');          
 document.write('E ' + (matriks[4]=new Array(x,x,5,1,0,1)) + '<br>');           
 document.write('F ' + (matriks[5]=new Array(x,x,x,3,1,0)) + '<br>');            
 document.write('</pre>');   
 document.write('<pre>A-2-B-6--D--3-F <br>');      
 document.write('\\   |   /|   / <br>');      
 document.write(' 3  3  3 1  1 <br>');      
 document.write('  \\ | /  | / <br>');      
 document.write('   \\|/   |/ <br>');      
 document.write('    C--5-E <br> </pre>');                 

}

init();
var dari = 0; // A
var ke   = 5; // F

dijkstra(matriks.length,dari,ke);

//-->
</script>
</body>
</html>