- Program menampilkan instruksi kepada user untuk memasukkan koordinat x awal kuda.
- Program menampilkan instruksi kepada user untuk memasukkan koordinat y awal kuda.
- Program mengisi kotak catur yang sesuai dengan koordinat dengan angka 1 sebagai detektor.
- Program memanggil fungsi awal.
- Fungsi awal akan membersihkan layar dan menampilkan koordinat kuda yang telah ditentukan user.
- Fungsi awal akan menampilkan papan catur dengan dimensi 8 x 8 dan menampilkan karakter ’o’ pada koordinat yang telah ditentukan dan telah berisi angka1.
- Program memanggil fungsi rekursi.
- Fungsi rekursi akan memeriksa koordinat sesuai dengan 8 prioritas gerakan kuda yang telah ditentukan programmer secara berurutan dan berisi angka 0.
- Jika koordinat tersebut telah memenuhi syarat, fungsi rekursi akan mengisi koordinat tersebut dengan angka 1. Kemudian fungsi rekursi akan memanggil fungsi sekarang.
- Fungsi sekarang akan membersihkan layar, menampilkan koordinat kuda yang telah memenuhi syarat, dan papan catur dengan karakter ’o’ pada koordinat tersebut dan telah berisi angka 1, karakter ‘x’ pada koordinat lain yang telah berisi angka 1 saja, dan mengisi spasi pada koordinat lainnya.
- Fungsi rekursi akan melakukan rekursi berulang kali hingga koordinat yang telah memenuhi syarat tidak bisa didapatkan lagi. Selanjutnya fungsi rekursi akan menampilkan informasi bahwa kuda tidak dapat bergrak lagi dengan statemen “There’s no way out for the knight>>”.
Source Code :
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int kotak[8][8];
void awal(int x1,int y1)
{
int a,b;
system("cls");
printf("Koordinat awal kuda adalah : %d,%d\n",(x1+1),(y1+1));
printf(" 1 2 3 4 5 6 7 8 x\n");
printf(" --- --- --- --- --- --- --- ---\n");
for(a=0;a<=14;a++)
{
if(a%2==1)
printf(" --- --- --- --- --- --- --- ---\n");
else
{
printf("%d ",(a+2)/2);
for(b=0;b<=7;b++)
{
printf("|");
if(kotak[b][a/2]==1 && b==x1 && a/2==y1)
printf(" o ");
else
printf(" ");
}
printf("|\n");
}
}
printf(" --- --- --- --- --- --- --- ---\n");
printf("y\n");
getch();
}
void sekarang(int x1,int y1)
{
int a,b;
system("cls");
printf("Koordinat kuda sekarang adalah : %d,%d\n",(x1+1),(y1+1));
printf(" 1 2 3 4 5 6 7 8 x\n");
printf(" --- --- --- --- --- --- --- ---\n");
for(a=0;a<=14;a++)
{
if(a%2==1)
printf(" --- --- --- --- --- --- --- ---\n");
else
{
printf("%d ",(a+2)/2);
for(b=0;b<=7;b++)
{
printf("|");
if(kotak[b][a/2]==1 && b==x1 && a/2==y1)
printf(" o ");
else
if(kotak[b][a/2]==1)
printf(" x ");
else
printf(" ");
}
printf("|\n");
}
}
printf(" --- --- --- --- --- --- --- ---\n");
printf("y\n");
getch();
}
void rekursi(int x2,int y2)
{
if(x2+1<=7 && y2+2<=7 && kotak[x2+1][y2+2]==0)
{
kotak[x2+1][y2+2]=1;
sekarang(x2+1,y2+2);
rekursi(x2+1,y2+2);
}
else
if(x2+2<=7 && y2+1<=7 && kotak[x2+2][y2+1]==0)
{
kotak[x2+2][y2+1]=1;
sekarang(x2+2,y2+1);
rekursi(x2+2,y2+1);
}
else
if(x2+2<=7 && y2-1>=0 && kotak[x2+2][y2-1]==0)
{
kotak[x2+2][y2-1]=1;
sekarang(x2+2,y2-1);
rekursi(x2+2,y2-1);
}
else
if(x2+1<=7 && y2-2>=0 && kotak[x2+1][y2-2]==0)
{
kotak[x2+1][y2-2]=1;
sekarang(x2+1,y2-2);
rekursi(x2+1,y2-2);
}
else
if(x2-1>=0 && y2-2>=0 && kotak[x2-1][y2-2]==0)
{
kotak[x2-1][y2-2]=1;
sekarang(x2-1,y2-2);
rekursi(x2-1,y2-2);
}
else
if(x2-2>=0 && y2-1>=0 && kotak[x2-2][y2-1]==0)
{
kotak[x2-2][y2-1]=1;
sekarang(x2-2,y2-1);
rekursi(x2-2,y2-1);
}
else
if(x2-2>=0 && y2+1<=7 && kotak[x2-2][y2+1]==0)
{
kotak[x2-2][y2+1]=1;
sekarang(x2-2,y2+1);
rekursi(x2-2,y2+1);
}
else
if(x2-1>=0 && y2+2>=0 && kotak[x2-1][y2+2]==0)
{
kotak[x2-1][y2+2]=1;
sekarang(x2-1,y2+2);
rekursi(x2-1,y2+2);
}
else
printf("\n<<There's no way out for the knight>>");
}
main(void)
{
int x,y,x0,y0;
printf("Masukkan koordinat x awal kuda : ");
scanf("%d",&x);
printf("Masukkan koordinat y awal kuda : ");
scanf("%d",&y);
x0=x-1;
y0=y-1;
kotak[x0][y0]=1;
awal(x0,y0);
rekursi(x0,y0);
getch();
}