Visitors hit counter dreamweaver

马的日字走法和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;
}

 

posted @ 2012-03-10 21:55  Jason Damon  阅读(524)  评论(0编辑  收藏  举报