在n×m棋盘上有一中国象棋中的马,规定:
思路:深度搜索(因为某些原因,我的结果与样例不符,但我程序所显示的路径也是可行的)另:我的程序有注释,您应该能看明白;您如果对我的程序有不明白的,欢迎问我!
#include<iostream>
using namespace std;
int n,m,a[105][3],visit[70][70],step=1;
int fx[5]={0,-1,-2,2,1},fy[5]={0,-2,-1,1,2};
void dfs(int x,int y)
{
if(x==m&&y==n)
{
for(int i=1;i<=step-2;i++)
{
cout<<"("<<a[i][1]<<","<<a[i][2]<<")->";//按照输出格式
}
cout<<"("<<x<<","<<y<<")";
exit(0);//强制结束程序
}
for (int i=1;i<=4;i++)
{
int nx=x+fx[i],ny=y+fy[i];//下一步可能在此点
if(nx>=1&&nx<=m&&ny>=1&&ny<=n&&visit[nx][ny]==0)//判断是否可以继续走
{
a[step][1]=nx;
a[step][2]=ny;//记录步骤
step++;
visit[nx][ny]=1;//标记,防止重复
dfs(nx,ny);//dg(递归)
visit[nx][ny]=0;
step--;
}
}
}
int main()
{
cin>>m>>n;
a[step][1]=1;
a[step][2]=1;
step++;
visit[1][1]=1;
dfs(1,1);
}
这个无非就是求这个过程中马走上偏右(1,2)和右偏上(2,1)的个数x,y。
有
1+x+2y=m
1+2x+y=n
这个你总会求咯,然后反正顺序不影响,图简单,前x次+(1,2)后y次+(2,1)即可,很简单