DFS Algoritması Hazır C Kodu

Eğer Okumadıysanız mutlaka Okuyun.

DFS Algoritması Adım Adım Uygulama
DFS Algoritması C Kodu Nasıl Yazılır

DFS algoritması C kodunun nasıl yazılacağı üzerine yaklaşımda bulunmuştuk. Bu yazımda ise sizlere direkt DFS Algoritması C kodu paylaşımı yapıyorum.

C kodunda;

Stack push
Stack pop
initial
DFS

fonksiyonları bulunmaktadır. Tüm satırlara yorum satırları eklenmiştir.

DFS Algoritması C Kodu (Iterative)


// ************ Algoritma Uzmanı ************ //
// *********www.Algoritma Uzmanı.com********* //

#include <stdio.h>
#include <stdbool.h>

// düğüm ziyaret edilmediyse 1 edildiyse 2
#define initial 1
#define visited 2

// global değişkenleri tanımladık
int dizi[5][5];
int state[5];
int yigin[5];
int top = -1;

//yigin bos mu kontrolü
bool stack_bos_mu()
{
    if(top==-1)
        return 1;
    else
        return 0;
}

//yigin dolu mu kontrolü
bool stack_dolu_mu()
{
    if(top == 5)
        return 1;
    else
        return 0;
}

//yigina eleman ekleme fonksiyonu
void push(int data)
{
    if(stack_dolu_mu())
        printf("\nStack Dolu");
    else
    {
        top = top+1;
        yigin[top] = data;
    }
}

//yigindan eleman çıkarma fonksiyonu
void pop()
{
    if(stack_bos_mu())
        printf("\nStack Bos!");
    else
    {
        top = top-1;
    }
}

//ilk başta tüm düğümleri ziyaret edilmemiş
//yani initial pozisyona getiriyoruz
void hazirla()
{
    int i;
    for(i=0;i<5;i++)
    {
        state[i] = initial;
    }
}

//Esas DFS fonksiyonumuz, parametre olarak başlangıç düğümü alıyor
void dfs(int root)
{
    int i;
    push(root); //başlangıç düğümü yığına ekleniyor
    state[root] = visited; //başlangıç düğümü ziyaret edildi olarak işaretlendi

    while(!stack_bos_mu()) //Döngümüz yığın boş olmadığı sürece dönecek
    {
        root = yigin[top]; //root değerine yığının top değerini atıyoruz
        printf("%d  ", root); // ekrana çıktı veriyoruz
        pop();//yığından eleman çıkarıyoruz.

        for(i=0;i<5;i++)
        {
            if(state[i]!=visited) //ziyaret edilmemiş düğümleri yığına ekleyip ziyaret edildi yapıyoruz
            {
                state[i] = visited;
                push(i);
            }
        }
    }

}

void matrisOku(int dizi[5][5])
{

    int i;
  FILE *fp = fopen ("matris.txt", "r");
  if (fp == NULL) {
    fprintf (stderr, "Dosya acilamadi\n");
    return 255;
  }

  for (i = 0; fscanf (fp, "%d %d %d %d %d", &dizi[i][0],
                                            &dizi[i][1],
                                            &dizi[i][2],
                                            &dizi[i][3],
                                            &dizi[i][4]) != EOF && i < 5; ++i);

  fclose (fp);

}

void algoritmaUzmani();
int main()
{
    int i, j, secim;

    int dizi[5][5];

    matrisOku(dizi);
    hazirla();

    printf("\n Kok dugumu girin (0 ve 4 dahil bir rakam girin)");
    scanf("%d", &secim);
    dfs(secim);

    printf("\n ilgili konuya gitmek icin klavyeden 7 rakamına basin\n");
    scanf("%d", &secim);
    if(secim == 7)
        algoritmaUzmani();
    return 0;
}

//sadece ilgili konuya gitmek icin. diger kodlar ile ilgisi yok
void algoritmaUzmani()
{
     system("C:\\Progra~2\\Google\\Chrome\\Application\\chrome.exe http://www.algoritmauzmani.com/2016/10/dfs-algoritmasi-c-kodu-nasil-yazilir.html");
     printf("\n Eger asagida sistem yolu hatasi aliyorsaniz bunu onemsemeyin");
     if(system)
     {
          system("C:\\Progra~1\\Google\\Chrome\\Application\\chrome.exe http://www.algoritmauzmani.com/2016/10/dfs-algoritmasi-c-kodu-nasil-yazilir.html");
          if(system)
            system("C:\\Progra~2\\Mozill~1\\firefox.exe http://www.algoritmauzmani.com/2016/10/dfs-algoritmasi-c-kodu-nasil-yazilir.html");
            if(system)
                system("C:\\Progra~1\\Mozill~1\\firefox.exe http://www.algoritmauzmani.com/2016/10/dfs-algoritmasi-c-kodu-nasil-yazilir.html");
     }
}

Etiketler: ,