问题描述:在一个国际象棋的棋盘上,一个马按照它的规则如何才能从一个点出发遍历每一个位置,且每个点只访问一次。
问题分析:这是一个深搜的问题,沿着一条路前进直到遍历全部的点,那就完成了整个的过程。如果不行,就回退一步,换个方向继续前进。这可以用递归很方便地实现。注意到马在某个位置最多有8个方向可以走,因此需要对这8个方向进行试探。当然这8个方向不一定都存在,比如在边缘可能就会少一些。考虑到实际8*8的棋盘计算量比较大,我们使用6*6代替。
#include <stdio.h>
#define N 6
int chess[N][N];
int next(int* x, int* y, int dir)
{
switch(dir)
{
case 1:
if (*x+1 < N && *y-2 >= 0 && chess[*x+1][*y-2] == 0)