您的位置:首页 > 其它

c 数据算法参考书本 跳斑马

2016-02-27 00:35 344 查看
#include <stdio.h>
#include <stdlib.h>
#define X 8
#define Y 8

int chess[X][Y];

int nextxy(int *x, int *y, int conut)
{
switch (conut)
{
case 0:
if (*x + 2 <= X - 1 && *y - 1 >= 0 && chess[*x + 2][*y - 1] == 0)
{
*x = *x + 2;
*y = *y - 1;
return 1;
}
break;
case 1:
if (*x + 2 <= X - 1 && *y +1 <=Y-1 &&chess[*x + 2][*y+1] == 0)
{
*x = *x +2;
*y = *y +1;
return 1;
}
break;
case 2:
if (*x + 1 <= X - 1 && *y - 2 >=0 && chess[*x + 1][*y -2] == 0)
{
*x = *x + 1;
*y = *y - 2;
return 1;
}
break;
case 3:
if (*x + 1 <=X-1 && *y +2 <=Y-1 && chess[*x +1][*y +2] == 0)
{
*x = *x +1;
*y = *y +2;
return 1;
}
break;
case 4:
if (*x - 2 >= 0 && *y - 1>=0 && chess[*x - 2][*y -1] == 0)
{
*x = *x - 2;
*y = *y - 1;
return 1;
}
break;
case 5:
if (*x - 2 >= 0 && *y +1 <=Y-1 && chess[*x - 2][*y +1] == 0)
{
*x = *x - 2;
*y = *y+1;
return 1;
}
break;
case 6:
if (*x - 1 >= 0 && *y - 2 >=0&& chess[*x - 1][*y - 2] == 0)
{
*x = *x - 1;
*y = *y -2;
return 1;
}
break;
case 7:
if (*x - 1 >= 0 && *y+2 <= Y - 1 && chess[*x - 1][*y + 2] == 0)
{
*x = *x - 1;
*y = *y + 2;
return 1;
}
break;
}
return 0;
}

int TravelChessBoard(int x, int y, int tag)
{
int x1 = x, y1 = y, flag = 0, conut = 0;
chess[x][y] = tag;
if (tag == X*Y)
return 1;
flag = nextxy(&x1, &y1, conut);
while (flag == 0 && conut < 7)
{
conut = conut += 1;
flag = nextxy(&x1, &y1, conut);
}
while (flag)
{
if (TravelChessBoard(x1, y1, tag + 1))
{
return 1;
}
x1 = x;
y1 = y;
conut = conut + 1;
flag = nextxy(&x1, &y1, conut);
while (flag == 0 && conut < 7)
{
conut = conut + 1;
flag = nextxy(&x1, &y1, conut);
}
}
if (!flag)
chess[x][y] = 0;
return 0;
}

void main111()
{

int i, j;
for (i = 0; i < X;i++)
for (j = 0; j < Y; j++)
chess[i][j] = 0;
if (TravelChessBoard(2, 0, 1))
{
for (i = 0; i < X; i++)
{
for (j = 0; j < Y; j++)
printf("%4d", chess[i][j]);
printf("\n");
}
printf("The horse has travelled the chess borad\n");
}
else
printf("The horse cannot travel the chess boarf\n");
getchar();

system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: