// ************ 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: dfs algoritması hazır c kodu, dfs algoritması iterative