题目描述
在5*4的棋盘中,马只能走斜“日”字。马从位置(x, y)处出发,把棋盘的每一格都走一次,且只走一次,请找出所有路径。
输入
x,y,表示马的初始位置。
输出
将每一格都走一次的路径总数,如果不存在该路径则输出“No solution!”。
#include<bits/stdc++.h>
#define mCheck(x,y) (x<0||y<0||x>=n||y>=m||a[x][y]!=0)
using namespace std;
int fx[8]= {1,2,2,1,-1,-2,-2,-1};
int fy[8]= {2,1,-1,-2,-2,-1,1,2};
static int mCount;
const static int n=5,m=4;
int a[n][m];
void mFind(int x,int y,int dep)
{
int xx,yy;
for(int i=0; i<8; i++)
{
xx=x+fx[i];
yy=y+fy[i];
if(!mCheck(xx,yy))
{
a[xx][yy]=dep;
if(dep==n*m)
mCount++;
else
mFind(xx,yy,dep+1);
a[xx][yy]=0;
}
}
}
int main()
{
int x,y;
while(cin>>x>>y){
mCount=0;
memset(a,0,sizeof(a));
a[x-1][y-1]=1;
mFind(x-1,y-1,2);
if(mCount==0)
cout<<"No solution!"<<endl;
else
cout<<mCount<<endl;
}
}