Prufer Encoding dan Decoding Menggunakan Bahasa C - Matematika Diskrit

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void kode()
{
int v,i,j,e,min,a;
printf ("Masukan Jumlah Vertex : ");
scanf ("%d",&v);
e = v-1;
int edge[e][2],derajat[v+1];

for(i=0;i<=v;i++)
{
derajat[i]=0;
}
for(i=0;i<e;i++)
{
printf ("Masukan Edge Ke-%d\n",i+1);
scanf ("%d %d",&edge[i][0],&edge[i][1]);

derajat[edge[i][0]]++;
derajat[edge[i][1]]++;
}
printf ("\nTotal Derajat\n");
for (i=1;i<=v;i++)
{
printf ("Vertex ke-%d -> %d\n",i,derajat[i]);
}
printf ("\n");
printf ("Kode : ");
for(i=0;i<v-2;i++)
{

min=999;
for(j=0;j<e;j++)
{

if(derajat[edge[j][0]] && derajat[edge[j][1]]!=0)
{
if(derajat[edge[j][0]]==1)
{

if(min>edge[j][0])
{

min = edge[j][0];
a = j;
}

}

if(derajat[edge[j][1]]==1)
{


if(min>edge[j][1])
{
min = edge[j][1];
a = j;
}
}
}
}
derajat[edge[a][0]]--;
derajat[edge[a][1]]--;
if(derajat[edge[a][0]]==0)
{
printf ("%d ",edge[a][1]);
}
else{
printf ("%d ",edge[a][0]);
}

}
}
void tree()
{
int i,j,k,jumlah,x=0;
    printf("Input jumlah verteks : ");
    scanf("%d",&jumlah);
    int verteks[jumlah];
    int kode[jumlah-2];
    //input kode pruffer
    printf("\n Masukkan Kode Prufer Tree : ");
    for(i=0;i<jumlah-2;i++)
    scanf("%d",&kode[i]);
    //untuk mendapatkan angka verteks
    for(i=0;i<jumlah;i++){
        verteks[i] = i+1;
    }
    //menampilkan angka yang dibandingkan
    printf("\n Verteks = ");
    for(i=0;i<jumlah;i++){
      printf(" %d ",verteks[i]);
    }
    int hitung;
    printf("\n");
    printf("\n Rekonstruksi Kode Prufer :\n");
    for(i=0;i<jumlah-2;i++){
        for(j=0;j<jumlah;j++){
                hitung=0;
                //perulangan untuk menghitung angka yang sama
                for(k=0;k<jumlah-2;k++){
                    if(kode[k]==verteks[j]){
                        hitung++;
                    }
                }
                //jika tidak ada angka yang sama
                if(hitung==0){
                        break;
                    }
            }
           printf(" %d - %d ",kode[i],verteks[j]);
           printf("\n");
           kode[i]=0;
           verteks[j]=0;
        }
        //verteks yang tersisa pada tree dengan nama variabel verteks
        for(i=0;i<jumlah;i++){
            if(verteks[i]!=0){
                if(x==0)
                {
                    printf(" %d",verteks[i]);
                }
                if(x==1)
                {
                    printf(" - %d ",verteks[i]);
                }
                x++;

            }
        }
}
int main()
{
int pil;

do{
system("cls");
printf ("1. Tree ke Kode\n");
printf ("2. Kode ke Tree\n");
printf ("3. Exit\n");
printf ("Masukan Pilihan : ");
scanf ("%d",&pil);
switch(pil)
{
case 1:
kode();
getch();
break;
case 2:
tree();
getch();
break;
case 3:
exit(3);
break;
default:
printf ("Salah Input\n");
break;
}
}while(pil!=3);

return 0;
}

Postingan terkait:

4 Tanggapan untuk "Prufer Encoding dan Decoding Menggunakan Bahasa C - Matematika Diskrit"

  1. wah sangat bermanfaat, trimakasi ya gan tugas saya jadi semakin mudah. sukses terus!

    BalasHapus
  2. wah pas banget saya lagi perlu buat tugas uas saya

    BalasHapus
  3. berguna banget cok, kleng emang.

    BalasHapus