Kamis, 14 Juli 2011

DJIKSTRA algoritma

Assalammuaikum Wr. Wb.

    Sebelumnya kami ucapkan terimakasih pada yang telah memberikan informasi pada kami tentang Bahasa C dan algoritma Djikstra.
Kakak-kakak sekalian yang telah belajar algoritma atau Bahasa C dan siapa saja yang mencari algoritma Djikstra silahkan saja kakak-kakak sekalian pelajari progam di bawah ini. Tetapi sebelumnya kakak-kakak sekalian harus mempelajari dasar-dasar dari Djikstra.
Jujur saja program ini merupakan terjemahan dari blog yang lain, bukan maksud kami menjiplak hasil karya orang lain tetapi disini kami coba memperjelas lagi dan menerjemahkan dalam bahasa sehari-hari.
Sebenarnya program ini merupakan tugas pemrograman di sekolah kami, dan untuk mendapatkan program ini sangat sulit sekali begitu juga menerjemahkannya, sampai sekarang juga kami khususya penulis tidak SEPENUHNYA paham. Mungkin dengan program dibawah ini dapat membantu kakak-kakak sekalian yang mencari program djikstra.Amin....


#include<stdio.h>
#include<stdlib.h>
void main()
{   
        printf("\n\t\t\t<<<PROGRAM MENCARI RUTE TERPENDEK>>>\n");
        printf("\t\t\t====================================\n");
         int grafik[15][15],s[15],jalan_maksimal[15],tanda[15];
        int kota_asal,sumber,i,j,u,pendahulu[15];
         int count=0;
         int minimum(int a[],int m[],int k);
         void printpath(int,int,int[]);
        
         printf("\n=========================");
         printf("\nMasukkan Banyak Kota: ");
         scanf("%d",&kota_asal);
         printf("=========================");
         if(kota_asal<=0)
         {
              printf("\nKOTA TIDAK TERDAFTAR\n");
               exit(1);
         }
         printf("\n\n\nMASUKAN JARAK BERDASARKAN MATRIK\n");
         printf("================================");
        for(i=1;i<=kota_asal;i++)
         {
              printf("\nMasukkan Jarak Semua Kota Dari Kota Ke-%d\n",i);
              for(j=1;j<=kota_asal;j++)
                  {
                       scanf("%d",&grafik[i][j]);
                  }
         }
     printf("\n\n========================");
     printf("\nMasukkan Kota Asal: ");
     scanf("%d",&sumber);
     printf("========================\n");
     printf("\n\nMaka Jalan Terdekat Ke Semua Kota Adalah");
     printf("\n========================================");
   
     for(j=1;j<=kota_asal;j++)
     {
          tanda[j]=0;
        jalan_maksimal[j]=999;
          pendahulu[j]=0;
     }
     jalan_maksimal[sumber]=0;
     while(count<kota_asal)
     {
      u=minimum(jalan_maksimal,tanda,kota_asal);
      s[++count]=u;
      tanda[u]=1;
      for(i=1;i<=kota_asal;i++)
          {
           if(grafik[u][i]>0)
           {
            if(tanda[i]!=1)
            {
            if(jalan_maksimal[i]>jalan_maksimal[u]+grafik[u][i])
                {
                 jalan_maksimal[i]=jalan_maksimal[u]+grafik[u][i];
                 pendahulu[i]=u;
                }
            }
           }
          }
      }
 
     for(i=1;i<=kota_asal;i++)
     {
         printpath(sumber,i,pendahulu);
         if(jalan_maksimal[i]!=999)
         printf("->(%d)\n",jalan_maksimal[i]);
     }
}

int minimum(int a[],int m[],int k)
{
 int mi=999;
 int i,t;
 for(i=1;i<=k;i++)
 {
  if(m[i]!=1)
      {
          if(mi>=a[i])
          {
           mi=a[i];
           t=i;
          }
     }
 }
 return t;
}
   
void printpath(int x,int i,int p[])
{
     printf("\n");
    if(i==x)
    {
        printf("%d",x);
    }
        else if(p[i]==0)
        printf("TIDAK ADA JALAN DARI %d KE %d",x,i);
        else
        {
            printpath(x,p[i],p);
            printf("..%d",i);
        }
}

Tidak ada komentar:

Posting Komentar