马遍历棋盘路径数量

// 马走棋盘.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<iostream>
int maze[8][8],n,x,y; //x,y开始坐标,n维数
int mx[8]={-2,-2,-1,1,2,2,1,-1};//方向
int my[8]={-1,1,2,2,1,-1,-2,-2};
int cnt=0;//记录路径数量
bool check(int x,int y)
{
return (maze[x][y]==0&&x>=0&&x<n&&y<n&&y>=0);
}
void travel(int x,int y, int number)
{
int i,j;
if(!check(x,y)) return; //判断x,y是否在棋盘中且未走过
maze[x][y]=number;
if(number==n*n) //走完,打印路径
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%d ",maze[i][j]);
printf("\n");
}
printf("\n");
cnt++;
}
else
{
for(i=0;i<8;i++)
{
travel(x+mx[i],y+my[i],number+1); //递归调用
}

} maze[x][y]=0;
}
int main()
{
while(scanf("%d%d%d",&x,&y,&n)!=EOF)
{
memset(maze,0,sizeof(maze));
cnt=0;
travel(x-1,y-1,1);
printf("%d\n",cnt);
}
return 0;
}
原文地址:https://www.cnblogs.com/bersaty/p/2365400.html