#include <iostream>
using namespace std;
string beginstr;
string endstr;
int endx;
int endy;
int minstep;
int direct[8][2]={{2,1},{2,-1},{1,2},{1,-2},{-1,2},{-1,-2},{-2,1},{-2,-1}};
void dfs(int x,int y,int step){
if(step>=minstep)
return;
if(x>=8||x<0||y>=8||y<0)
return;
if(x==endx&&y==endy){
if(step<minstep)
minstep=step;
return;
}
for(int i=0;i<8;i++){
int dx=x+direct[i][0];
int dy=y+direct[i][1];
dfs(dx,dy,step+1);
}
}
int main(){
while(cin>>beginstr>>endstr){
minstep=999;
int x=8-(beginstr[1]-'0');
int y=beginstr[0]-'a';
endx=8-(endstr[1]-'0');
endy=endstr[0]-'a';
dfs(x,y,0);
cout<<minstep<<endl;
}
return 0;
} 一开始想得太复杂

本文介绍了一个使用深度优先搜索(DFS)算法解决骑士周游问题的C++实现方案。该程序通过递归地尝试所有可能的移动路径来寻找从起点到终点所需的最少步数。输入为起始和结束位置,输出是最少移动步数。
303

被折叠的 条评论
为什么被折叠?



