马的日字走法和knight是同意类型的。
题目描述:在一个4*5的棋盘上,马的起始位置坐标有键盘输入,求马能返回起始位置的不同走法总数(马走过的位置不能重复,马走“日”字。
输入输出样例
Sample input Simple output
2 2 5469
经典回溯,特殊性不是很强。特殊点是需记录走法,方法是,如果走成功则记录该步的走法,否则不记录。
#include <iostream>
#include <cstdio>
#define N 4
#define M 5
using namespace std;
int dx[]={2,2,1,1,-2,-2,-1,-1};
int dy[]={-1,1,-2,2,-1,1,-2,2};
int board[N][M];
int count=0,i,j,x,y;
void Trace(int sx,int sy){
int i,px,py;
for(i=0 ;i<8 ;i++){
px=sx+dx[i];
py=sy+dy[i];
if(px==x && py==y){
count++;
}
else if(board[px][py]==0 && px>=0 && px<N
&& py>=0 && py<M){
board[px][py]=1;
Trace(px,py);
board[px][py]=0;
}
}
}
int main()
{
for(i=0 ;i<4 ;i++)
for(j=0 ;j<5 ;j++)
board[i][j]=0;
//scanf("%d%d",&x,&y);
x=2;y=2;
board[x][y]=1;
Trace(x,y);
printf("%d\n",count);
return 0;
}
我是一名在校大学生,热爱编程,虽然起步晚了些,但我会努力的。呵呵!
数据结构 算法