有一个n行m列的方格棋盘, (x,y)格有一个中国象棋的“马”,“马”行走的规则是“马走日”,下面是示意图:
当然,马不能走到棋盘外面地方。问“马”可否只跳n*m-1步就可以到达过整个棋盘?
如果可以输出1,否则输出0。
输入格式
第1行2个正整数n和m,范围[4,8]。
第2行2个正整数x和y,x范围[1,n] ,y范围[1,m]。
输出格式
1或0。
输入/输出例子1
输入:
5 4
2 2
输出:
0
输入/输出例子2
输入:
5 4
1 1
输出:
1
#include<bits/stdc++.h>
using namespace std;
struct Tnode{
int r,c,step;
}ans[100];
int a[1000][1000];
int n,m,x,y;
int dc[]={-1,1,2,2,1,-1,-2,-2};
int dr[]={-2,-2,-1,1,2,2,1,-1};
bool DFS(int c,int r,int step)
{
a[c][r]=1;
if(step==n*m-1)
return 1;
for(int i=0;i<8;i++)
{
int nc=c+dc[i];
int nr=r+dr[i];
if(nc>=1 && nc<=n && nr<=m && nr>=1 && a[nc][nr]==0)
{
a[nc][nr]=1;
if(DFS(nc,nr,step+1)==1)
return 1;
a[nc][nr]=0;
}
}
return 0;
}
int main(){
cin>>n>>m>>x>>y;
a[x][y]=1;
cout<<DFS(x,y,0);
return 0;
}