Problém koňa na šachovnici

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
//#define max MAXX*MAXY        
using namespace std;

INT blud[MAXX][MAXY];
long double sk;

void na(int x,int y)
{  
  HANDLE  hConsole;                           // ziskanie handle konzoly
          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;//system("PAUSE");
     //Sleep(10);
}

int skok(int x,int y)
{
     //sk++;
     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';//vypis();
     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';//vypis();
     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';//vypis();
     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';//vypis();
     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';//vypis();
     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';//vypis();
     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);//system("PAUSE");
//    for(i=0;i<4;i++)
//      for( j=0;j<4;j++)
//        {sk=0;
//         cout<<endl<<i<<'x'<<j<<endl;
//         skok(i,j);
//         system("PAUSE");
//        }
        
        vypis();
    system("PAUSE");
    return EXIT_SUCCESS;
}

Informácie:

Autor: danciwo
www: http://www.danciwo.net
Kategória: Algoritmy
Jazyk: C/C++
Dátum:10/21/2009 1:14:08 PM



Komentáre:



Pridaj komentár:

Pre vloženie komentáru sa musíte najprv prihlásiť.






 Fórum:
Hardware
Software
Programovanie
Všeobecné témy

 Programy:
C#
C/C++
Java
Pascal
PHP

Linky:

Vretenova webova stranka o programovani v Cpp,c++,C,linuxe...

Wdesign

ByteLeak.com diskusné fórum

BlueBoard.cz