#include <stdio.h>
int a[100][2],t; //路径总数和路径 a[i][0]:x坐标 a[i][1]:y坐标
int x[4]={2,1,-1,-2}, //四种移动规则
y[4]={1,2,2,1};
int f(int i){
int j;
for(j=0;j<4;j++){ //往四个方向跳
if(a[i-1][0]+x[j]>=0&&a[i-1][0]+x[j]<=4 //判断y坐标是否越界
&&a[i-1][1]+y[j]>=0&&a[i-1][1]+y[j]<=8){ //判断x坐标是否越界
a[i][0]=a[i-1][0]+x[j]; //保存当前马的位置
a[i][1]=a[i-1][1]+y[j];
if(a[i][0]==4&&a[i][1]==8){ //已到目的地,则输出
int k;
t++;
printf("%d:",t);
for(k=1;k<=i-1;k++)
printf("(%d,%d) -> ",a[k][0],a[k][1]);
printf("(4,8)\n");
}
else f(i+1); //回溯:递归返回,走下一步
}
}
}
int main(){
f(2); //从坐标(0,0)开始望右跳第二步
return 0;
}