DFS Algoritması C kodu 2 şekilde yazılır.
Recursive DFS Algoritması
Iterative DFS Algoritması
Recursive DFS Algoritması
Yazılması çok kolaydır, çoğu kişi bu yöntemi tercih eder. Algoritma greedy bir algoritma olduğu için kendini çağırması sayesinde kolayca tüm düğümler gezilir.
Recursive DFS Fonksiyonu
void DFS(int i)
{
int j;
printf("\n%d",i);
visited[i]=1;
for(j=0;j<n;j++)
if(!visited[j]&&G[i][j]==1)
DFS(j);
}
yukarıdaki fonksiyonu anlatmamız gerekirse, kendisine gönderilen başlangıç düğümünden başlıyor ve gönderilen düğümü visited olarak işaretliyor.
daha sonra döngüye giriyor, döngüdeki if şartı şu şekilde, ziyaret edilmemiş ve arada bağlantı olan düğümleri bulduğunda dfs(j) fonksiyonunu geri çağır. Peki işi hangi komut yapıyor? Esas numara visited[i] = i noktasında, bulunan her nokta visited olarak işaretleniyor, böylece traverse işlemi tamamlanıyor. Oldukça hoş bir yöntem, ancak ben iterativeciyim :) şimdi Iterative metodu anlatalım.
Iterative DFS Fonksiyonu
void DFS(int s)
{
push(s);
state[s] = visited;
while(!stack_bos_mu())
{
s = peek();
printf("%d", s);
pop();
for(int i=0; i<n; i++)
{
if(!visited[i])
{
visited[i] = true;
push(i);
}
}
}
state[s] = visited;
while(!stack_bos_mu())
{
s = peek();
printf("%d", s);
pop();
for(int i=0; i<n; i++)
{
if(!visited[i])
{
visited[i] = true;
push(i);
}
}
}
}
Iterative metotta mantık çok basit.
Kök düğüm yığına eklenir: push(s)
Düğümün durumu visited yapılır: state[s] = visited
Daha Sonra Döngüye Girilir (döngü şartı yığının boş olmamasıdır)
Yığının tepesindeki eleman s değerine atanır: s = peek()
s değeri ekrana bastırılır
yığından eleman çıkartılır: pop()
daha sonra döngüye girilir;
eğer düğüm ziyaret edilmemişse
visited yapılır ve yığına eklenir.
Mutlaka Okuyun!
DFS Algoritması Hazır C Kodu

Hiç yorum yok:
Yorum Gönder