Created
December 11, 2013 09:43
-
-
Save sjchmiela/7907658 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <cstdio> | |
using namespace std; | |
int t[8][8] = | |
{ | |
{9, 9, 9, 9, 5, 6, 7, 8}, | |
{8, 8, 4, 3, 1, 1, 1, 1}, | |
{7, 7, 5, 2, 1, 1, 1, 1}, | |
{1, 6, 6, 1, 1, 1, 1, 1}, | |
{1, 4, 5, 1, 5, 1, 1, 1}, | |
{1, 3, 1, 4, 1, 4, 1, 1}, | |
{1, 2, 3, 1, 1, 1, 3, 1}, | |
{1, 1, 1, 2, 1, 1, 1, 1} | |
}; | |
int result[64]; | |
int distance(int from_x, int from_y, int to_x, int to_y) | |
{ | |
return (to_x-from_x)*(to_x-from_x)+(to_y-from_y)*(to_y-from_y); | |
} | |
int move_x(int move, int x) | |
{ | |
int dx[] = {0,1,1,1,0,-1,-1,-1}; | |
return x + dx[move]; | |
} | |
int move_y(int move, int y) | |
{ | |
int dy[] = {1,1,0,-1,-1,-1,0,1}; | |
return y + dy[move]; | |
} | |
bool inBoard(int move, int x, int y) | |
{ | |
return (move_x(move,x) >= 0 && move_x(move,x) < 8 && move_y(move,y) >= 0 && move_y(move,y) < 8); | |
} | |
bool moveSpelniaWarunkiZadania(int move, int x, int y, int to_x, int to_y) | |
{ | |
if(!inBoard(move,x,y)) { return false; } | |
if(distance(x,y,to_x, to_y) < distance(move_x(move,x), move_y(move,y),to_x,to_y)) { return false; } | |
int lastDigitOfCurrent; | |
int firstDigitOfTarget; | |
lastDigitOfCurrent = t[x][y]%10; | |
firstDigitOfTarget = t[move_x(move,x)][move_y(move,y)]; | |
while(firstDigitOfTarget/10 > 0) | |
{ | |
firstDigitOfTarget /= 10; | |
} | |
return (lastDigitOfCurrent < firstDigitOfTarget); | |
} | |
bool ruszSie(int x, int y, int to_x, int to_y, int pos_to_save) | |
{ | |
if(x == to_x && y == to_y) { return true; } // TEGO NIE NAPISAŁEM NA KARTKÓWCE. TYLKO. | |
for(int i = 0; i<8; i++) | |
{ | |
if(moveSpelniaWarunkiZadania(i, x, y, to_x, to_y)) | |
{ | |
if(ruszSie(move_x(i,x), move_y(i,y), to_x, to_y,pos_to_save+1)) | |
{ | |
result[pos_to_save] = i; | |
printf("ending on (%d, %d) trying to get to (%d, %d)\n",x,y,to_x,to_y); | |
return true; | |
} | |
} | |
} | |
return false; | |
} | |
int czySieDa(int w, int k) | |
{ | |
if(ruszSie(w, k, 0, 0, 0)) | |
{ | |
return 0; | |
} | |
if(ruszSie(w, k, 0, 7, 0)) | |
{ | |
return 1; | |
} | |
if(ruszSie(w, k, 7, 0, 0)) | |
{ | |
return 2; | |
} | |
if(ruszSie(w, k, 7, 7, 0)) | |
{ | |
return 3; | |
} | |
return -1; | |
} | |
int main() | |
{ | |
printf("%d\n",czySieDa(6,2)); | |
for(int i = 0; i<10; i++) | |
{ | |
printf("%d ",result[i]); | |
} | |
printf("\n"); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment