代码如下:
#include<bits/stdc++.h>
using namespace std;
int d[500][500];//存储走到点所需要的最少步数
int fx[9]={0,-1,-2,-2,-1,1,2,2,1};
int fy[9]={0,2,1,-1,-2,2,1,-1,-2};
int n,m;
void dfs(int x,int y,int def)//x,y表示坐标,def表示步数
{
//def用来存储步数
int tx,ty;
d[x][y]=def;
for(int i=1;i<=8;i++)
{
tx=x+fx[i];//遍历更新
ty=y+fy[i];
//先判断点可以通过并且不会出边界,这里不需要特别判断是因为这里是符号不是数字
if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&def+1<d[tx][ty])//def+1<d[tx][ty]表示走到(tx,ty)的步数更少,实际上从(x,y)走到(tx,ty)的步数只需要一步,因为可能之前绕远路,所以更新之后再查看)
dfs(tx,ty,def+1);//递推遍历
}
}
int main()
{
int i,j,s1,s2,e1,e2;
cin>>n>>m>>s1>>s2;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
d[i][j]=INT_MAX;//记住在循环里面将初始步数定义为最大数
}
dfs(s1,s2,0);//应用函数
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
if(d[i][j]==INT_MAX) cout<<"-1"<<endl;
else cout<<d[i][j]<<endl;
}
return 0;
}
本蒟蒻刚刚学的dfs,所以也不会bfs,想知道在这段代码基础上还是用dfs能否解决这道题。是数据点8超时了