Problém koňa na šachovnici: ako preskákať jazdcom celú šachovnicu, tak aby sme
na každé pole skočili práve raz.
Riešenie pre šachovnicu 4*4.
#include <cstdlib>
#include <iostream>
#include <windows.h>
#define MAXX 4
#define MAXY 4
using namespace std;
INT blud[MAXX][MAXY];
long double sk;
void na(int x,int y)
{
HANDLE hConsole; hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
COORD point = {x,y};
SetConsoleCursorPosition(hConsole, point);
}
void generuj(void)
{
int i,j;
for(i=0;i<MAXX;i++)
for(j=0;j<MAXY;j++)
blud[i][j]='.';
sk=0;
}
void vypis(void)
{
int i,j;
for(i=0;i<MAXX;i++)
{
for(j=0;j<MAXY;j++)
{na(i,j);putchar(blud[i][j]);}
}
printf("\n%02d",sk);
cout<<sk; }
int skok(int x,int y)
{
if(sk==MAXX*MAXY-2){cout<<endl<<endl<<"HURRRRAAAAAAAA"<<endl;system("PAUSE");return 0;}
sk++;
if(x+1<MAXX&&y-2>=0&&blud[x+1][y-2]=='.')
{blud[x][y]='1';blud[x+1][y-2]='x';vypis();
if(skok(x+1,y-2)==0)return 0;}
if(x-1>=0&&y-2>=0&&blud[x-1][y-2]=='.')
{blud[x][y]='2';blud[x-1][y-2]='x';vypis();
if(skok(x-1,y-2)==0)return 0;}
if(x-2>=0&&y-1>=0&&blud[x-2][y-1]=='.')
{blud[x][y]='3';blud[x-2][y-1]='x'; if(skok(x-2,y-1)==0)return 0;}
if(x-2>=0&&y+1<MAXY&&blud[x-2][y+1]=='.')
{blud[x][y]='4';blud[x-2][y+1]='x'; if(skok(x-2,y+1)==0)return 0;}
if(x-1>=0&&y+2<MAXY&&blud[x-1][y+2]=='.')
{blud[x][y]='5';blud[x-1][y+2]='x'; if(skok(x-1,y+2)==0)return 0;}
if(x+1<MAXX&&y+2<MAXY&&blud[x+1][y+2]=='.')
{blud[x][y]='6';blud[x+1][y+2]='x'; if(skok(x+1,y+2)==0)return 0;}
if(x+2<MAXX&&y+1<MAXY&&blud[x+2][y+1]=='.')
{blud[x][y]='7';blud[x+2][y+1]='x'; if(skok(x+2,y+1)==0)return 0;}
if(x+2<MAXX&&y-1>=0&&blud[x+2][y-1]=='.')
{blud[x][y]='8';blud[x+2][y-1]='x'; if(skok(x+2,y-1)==0)return 0;}
blud[x][y]='.';sk--;
return 1;
}
int main(int argc, char *argv[])
{
srand((unsigned)time(NULL));
generuj();
vypis();
int i,j;
skok(0,0);
vypis();
system("PAUSE");
return EXIT_SUCCESS;
}