SSL_1277【骑士游历】

骑士游历

题目

如下图所示有m*n(n,m<=15)一个棋盘,在棋盘左下角的A(1,1)点,有一个中国象棋〈马〉,并约定马走的规则:①走日字;②只能向右走。
SSL_1277【骑士游历】_第1张图片

输入

9 8

输出

10

解析

N,M<=15
经典暴搜题目,需要注意的是马不仅可以移到X+1,Y+2和X+2,Y+1,还可以移到X-1,Y-2和X-2,Y-1

代码

#include
#include
#include
using namespace std;
const int dx[5]={0,2,1,-1,-2},dy[5]={0,1,2,2,1},maxn=20;
int a[maxn+2][maxn+2],m,n,total=0;
int b[maxn*maxn+2];
void search(int x,int y)
{
    if(x==m&&y==n)total++;
    else 
     for(int i=1;i<=4;i++)
      if(x+dx[i]>0&&x+dx[i]<=m&&y+dy[i]>0&&y+dy[i]<=n)
    if(a[x+dx[i]][y+dy[i]]==0)
     {
      a[x+dx[i]][y+dy[i]]=1;
      search(x+dx[i],y+dy[i]);
      a[x+dx[i]][y+dy[i]]=0;
     }
}
void init()
{
 cin>>m>>n;
 memset(a,0,sizeof(a));
 a[1][1]=1;
 return;
}
void work()
{
 search(1,1);
 return;
}
void output()
{
 cout<<total;
 return;
}
int main()
{
 init();
 work();
 output();
 return 0;
}

附:骑士游历2

你可能感兴趣的:(DFS)