Knights tour problemini duyan olmuştur.
Duymayanlar için;
Satrançta bir at, satranç tahtası üstünde herhangi bir noktadan başlayıp her kareye yalnızca bir kez gelip bütün karaleri dolaşabilir mi?
1 haftadır bunla uğraşıyorum ama çeşitli yerlerde hep sorun çıkıyor. Mantığını anlayabilen biri varsa kodu inceleyebilir mi? ne yapmam gerekiyor? hatanın nerde olduğunu biliyorum ama düzeltemiyorum, anlatmak azıcık zpr, ama inceleyen biri zaten anlayacaktır.
Başlangıçta atı tahta üstünde (5,5) noktasından başlattım.
atın dolaştığı noktaları hamle sayısına eşitledim.
hamla sayısını "b" değişkeniyle tuttum.
mesela (4,4)=0 başlangıç ise, sonraki hamlesi (2,3)=1,....gibi
sorunda bu noktada çıktı zaten...
#include<stdlib.h>
#include<stdio.h>
int fonk(int,int,int [][8]);
int main(int a=5)
{
int satir=4, sutun=4;/*tahta üstünde başlangıç konumu*/
int table[8][8]={0};/*tahtadaki bütün kareleri(array'in elemanlarını) 0'a eşitledim*/
table[4][4]=0;
fonk(sutun,satir,table);
system("pause");
return 0;
}
/*satranç tahtasında bir at 8 farklı haraket yapabildiği için, a'yı 0dan 7ye kadar
bir loopun içine sokuyoruz, her bir a değeri farklı bir hamleyi gösteriyor.
eğer 0la 8arasında değilse loopa girmiyor, dolayısıyla at satranç tahtası dışına çıkmıyor*/
int fonk(int sutun,int satir,int table[][8])
{
static int b=0;
for(int a=0;a<8;a++)
{
switch(a)
{
case 0:
if(0<satir-2<8 && 0<sutun+1<8)
{
satir-=2;
sutun+=1;
b++;
table[satir][sutun]=b;
fonk(sutun,satir,table);
}
break;
case 1:
if(0<satir-1<8 && 0<sutun+2<8)
{
satir-=1;
sutun+=2;
b++;
table[satir][sutun]=b;
fonk(sutun,satir,table);
}
break;
case 2:
if(0<satir+1<8 && 0<sutun+2<8)
{
satir+=1;
sutun+=2;
b++;
table[satir][sutun]=b;
fonk(sutun,satir,table);
}
break;
case 3:
if(0<satir+2<8 && 0<sutun+1<8)
{
satir+=2;
sutun+=1;
b++;
table[satir][sutun]=b;
fonk(sutun,satir,table);
}
break;
case 4:
if(0<satir+2<8 && 0<sutun-1<8)
{
satir+=2;
sutun-=1;
b++;
table[satir][sutun]=b;
fonk(sutun,satir,table);
}
break;
case 5:
if(0<satir+1<8 && 0<sutun-2<8)
{
satir+=1;
sutun-=2;
b++;
table[satir][sutun]=b;
fonk(sutun,satir,table);
}
break;
case 6:
if(0<satir-1<8 && 0<sutun-2<8)
{
satir-=1;
sutun-=2;
b++;
table[satir][sutun]=b;
fonk(sutun,satir,table);
}
break;
case 7:
if(0<satir-2<8 && 0<sutun-1<8)
{
satir-=2;
sutun-=1;
b++;
table[satir][sutun]=b;
fonk(sutun,satir,table);
}
break;
}
}
if(b==64)
printf("FOUND!");
}