Labirent Dolaşma

1 ve 0 lar verilerek oluşturulan matriste C dilinde yazılacak olan labirent uygulaması……

1 1 1 1 1 0 0 1 0 0
0 1 0 0 1 1 0 1 1 1
1 1 1 1 0 1 1 1 0 0
1 1 0 1 1 0 0 1 1 1
1 0 0 1 0 0 0 1 0 0
0 0 0 1 1 0 0 0 0 0
1 1 0 0 1 1 1 1 0 0
0 0 1 1 1 0 0 1 1 0
0 0 1 0 1 0 0 0 1 0
0 0 0 0 0 0 0 0 1 1

Yukarıdaki 10×10 labirent üzerinde başlangıçtan bitişe doğru bir yol bulan program geliştireceğiz. 1 değerleri yol, 0 değerleri duvar anlamına gelmektedir. Labirenttin dışına duvar örmek için en üs, en alt satır ve en sol, en sağ sütün en sol sütün değerleri 0 olarak alınmıştır. Sol en baştaki kalın 1 den başlayıp sağ en alttaki 1 de son bulacaktır.

Geliştirilecek olan program için graf dolaşma algoritmasından faydalanacağız. Labirentteki noktalar arasındaki komşuluk yalnızca ana yön ile sağlanmaktadır (Aşağı-Yukarı-Sağa-Sola). Bir noktadan diğer bir noktaya çapraz yolla gidilemeyecektir.  Program her bir adımda ziyaret ettiği düğümün koordinatını ekrana yazdıracaktır ve Labirenti tanımlamak için dizi kullanacağız.

Özetle programın yapması gereken işler:

1. Labirentin dinamik olarak oluşturulması
2. Labirent üzerinde dolaşılan yolların ekrana yazdırılması

#include <stdio.h>
#define YATAYBOY 12//labirent etrafı duvar örülmesi için 12 seçildi
#define DUSEYBOY 12
#define YOL 1
#define DUVAR 0 

typedef int Labirent[DUSEYBOY][YATAYBOY]; 

int cozumAra(Labirent lbr,int baslamaX,int baslamaY,int bitisX,int bitisY) 

  {   

  if(baslamaX == bitisX && baslamaY == bitisY) 

       return 1; // çıkışa varıldı 

 if(lbr[baslamaY][baslamaX] == DUVAR) 

     return 0; 
lbr[baslamaY][baslamaX] = DUVAR; //bulunduğun yere duvar ör

     return cozumAra(lbr,baslamaX + 1,baslamaY,bitisX,bitisY) + 
cozumAra(lbr,baslamaX - 1,baslamaY,bitisX,bitisY) + 
cozumAra(lbr,baslamaX,baslamaY + 1,bitisX,bitisY) + 
cozumAra(lbr,baslamaX,baslamaY - 1,bitisX,bitisY); 

}

 void ciz(Labirent lbr,int girisX,int girisY,int cikisX,int cikisY) 

{ 

int i,j; 

for(i = 0; i < DUSEYBOY; i++) { 

for(j = 0; j < YATAYBOY; j++) { 

if(i == girisY && j == girisX) 

printf("G"); 

else if(i == cikisY && j == cikisX) 

printf("C"); 

else 
switch(lbr[i][j])
{ 
case YOL:printf("+"); 
break; 
case DUVAR:printf(" ");
break;
} 

} 

printf("\n"); } 

} 

int main() { 

Labirent lbr = 
{
{0,0,0,0,0,0,0,0,0,0,0,0},
{0,1,1,1,1,1,0,0,1,0,0,0},
{0,0,1,0,0,1,1,0,1,1,1,0},
{0,1,1,1,1,0,1,1,1,0,0,0},
{0,1,1,0,1,1,0,0,1,1,1,0},
{0,1,0,0,1,0,0,0,1,0,0,0},
{0,0,0,0,1,1,0,0,0,0,0,0},
{0,1,1,0,0,1,1,1,1,0,0,0},
{0,0,0,1,1,1,0,0,1,1,0,0},
{0,0,0,1,0,1,0,0,0,1,0,0},
{0,0,0,0,0,0,0,0,0,1,1,0},
{0,0,0,0,0,0,0,0,0,0,0,0} 
};

ciz(lbr,1,1,11,11); 

if(cozumAra(lbr,1,1,7,6)) { 

printf("\n\n==>> Cozum Yolu Bulundu <<==\n\n");
printf("G-Giris\n"); 
printf("C-Cikis\n"); 
printf("+ isaret yolu gosterir\n"); } 

else printf("Cozum Yolu Bulunamadi\n");
 return 0; 

}

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.