![]() |
| 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