问题描述
略
#include<iostream>
using namespace std;
int dx[5]={0,2,1,-1,-2};
int dy[5]={0,1,2,2,1};//增量数组
int a[1000][3];//记录路径
int m,n;
bool t;
void printx(int tot){
for (int i=1;i<tot;i++)
cout<<"("<<a[i][1]<<","<<a[i][2]<<")->";
cout<<"("<<a[tot][1]<<","<<a[tot][2]<<")"<<endl;
}
void tryx(int step){
if(a[step-1][1]==m&&a[step-1][2]==n){
printx(step-1);
t=true;
return;
}
for (int i=1;i<=4;i++){ //循环调用增量数组
int ik=a[step-1][1]+dx[i];
int jk=a[step-1][2]+dy[i];
if(ik>=0&&ik<=m&&jk>=0&&jk<=n&&t==false){
a[step][1]=ik;
a[step][2]=jk;//标记
tryx(step+1);
a[step][1]=0;
a[step][2]=0;//回溯
}
}
}
int main(){
cin>>m>>n;
t=false;//防止输出多条路径,需靠t停止搜索
a[1][1]=0;
a[1][2]=0;//马从(0,0)出发
tryx(2);
return 0;
}