cデータアルゴリズムは本を参考にしてシマウマを踊る

2529 ワード

#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("
"); } printf("The horse has travelled the chess borad
"); } else printf("The horse cannot travel the chess boarf
"); getchar(); system("pause"); }