![]() |
oylesine c kodu, bfs ile alakası yok |
#include <stdio.h> /* ***********Algoritma Uzmanı********** */ /* ********www.algoritmauzmani.com****** */ /* Aşağıdaki 3 değer düğümün durumu için */ #define hazir 1 #define beklemede 2 #define ziyaretEdilmis 3 int rear = -1, front = -1; // Kuyruğun ön ve arka değerleri int kuyruk[5]; // Kuyruk elemanlarını tutacak dizi int durum[5]; // Düğüm durumlarını tutacak dizi int dizi[5][5]; // Matrisimizi tutacak olan 2 boyutlu dizimiz // Bu fonksiyona gönderilen dizideki tüm düğümler başlangıçta "hazir" durumuna getirilecek void hazirEt(int dizi) { int i; for(i=0; i<5; i++) { durum[i] = hazir; } } //klasik kuyruga eleman ekleme fonksiyonu void kuyruga_ekle(int data) { if(rear == 4) printf("kuyruk dolu!"); else { if(front == -1) front = 0; rear = rear + 1; kuyruk[rear] = data; } } //kuyruktan hem eleman siler, hem de silinen degeri kullanıcıya döndürür int kuyruktan_sil() { int delete_item; if(front == -1 || front > rear) { printf("Kuyruk Bos\n"); exit(1); } delete_item = kuyruk[front]; front = front+1; return delete_item; } // Kuyruk bossa 1 return eder int kuyruk_bos_mu() { if(front == -1 || front > rear) return 1; else return 0; } // Esas bfs fonksiyonumuz burada, başlangıç düğümü parametre olarak gönderilir void bfs(int v) { int i; kuyruga_ekle(v); // gönderilen düğüm kuyruğa eklenir durum[v] = beklemede; // her zaman kuyruğa eklenen düğüm beklemede olarak işaretlenir while(!kuyruk_bos_mu()) // döngümüz kuyruk boş olduğu sürece döner { v = kuyruktan_sil( ); // kuyruktan silinen değer v değişkenine aktarılır printf("%d ",v); // kuyruktan silinen eleman ekrana yazdırılır durum[v] = ziyaretEdilmis; // kuyruktan silinen eleman her zaman ziyaretEdilmiş olarak işaretlenir for(i=0; i<5; i++) { if(dizi[v][i] == 1 && durum[i] == hazir) // eğer matriste düğümler arası bağlantı varsa "ve" durumu hazırsa alttaki işlemler gerçekleşir { kuyruga_ekle(i); durum[i] = beklemede; } } } printf("\n"); } //kendisine gonderilen dizi parametresiyle matris okuyan c fonksiyonu void matrisOku(int dizi[5][5]) { int i; // fp ismindeki dosya tipinde değişken oluşturduk // bu değişken, fopen komutuyla belirtilen dosyayı açıyor // "r" parametresiyle (read) dosyayı okuma işlemi yapıyor. FILE *fp = fopen ("matris.txt", "r"); // Dosyayı açamazsa hata mesajı gösteriyoruz if (fp == NULL) { fprintf (stderr, "Dosya acilamadi\n"); return 255; } // fscan fonksiyonunun gereği parametre olarak // dosya değişkeni adı, satır sayısı ve kaydedilecek yeri belirtiyoruz // Matriste sayılar arasında boşlul olduğu için %d ifadeleri arasında // Boşluk olmasına dikkat edin 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); //Dosyamızı kapatan fonksiyon fclose (fp); } void algoritmaUzmani(); int main() { int i, j, secim, root; matrisOku(dizi); hazirEt(durum); printf("hangi dugumden baslayacaksiniz? (0-4 arasi 0 ve 4 dahil rakam girin!)... "); scanf("%d", &root); bfs(root); 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/bfs-algoritmasi-c-kodu-nasil-yazlr.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/bfs-algoritmasi-c-kodu-nasil-yazlr.html"); if(system) system("C:\\Progra~2\\Mozill~1\\firefox.exe http://www.algoritmauzmani.com/2016/10/bfs-algoritmasi-c-kodu-nasil-yazlr.html"); if(system) system("C:\\Progra~1\\Mozill~1\\firefox.exe http://www.algoritmauzmani.com/2016/10/bfs-algoritmasi-c-kodu-nasil-yazlr.html"); } }
Etiketler: bfs algoritması c kodu, bfs algoritması cpp kodu, bfs algoritması hazır c kodu, bfs algoritması nedir