想用dfs 做一下这一题,但严重超时,哪里出了问题?
#include<bits/stdc++.h>
using namespace std;
string a,b;
int ans=1000000,ax,ay,bx,by;
int ne[8][2]={{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2},{-1,-2},{-2,1}};
int vis[25][25]={0};
void dfs(int x,int y,int n)
{
if(x==bx&&y==by)
{
ans=min(ans,n);
cout<<ans<<endl;
return;
}
for(int i =0;i<8;i++)
{
int nx=x+ne[i][0];
int ny=y+ne[i][1];
if(nx>=1&&nx<=8&&ny>=1&&ny<=8&&vis[nx][ny]!=1)
{
vis[nx][ny]=1;
dfs(nx,ny,n+1);
vis[nx][ny]=0;
}
}
}
int main()
{
while(cin>>a>>b)
{
memset(vis,0,sizeof(vis));
ans=1000000;
ax=a[0]-'a'+1;
ay=a[1]-'0';
bx=b[0]-'a'+1;
by=b[1]-'0';
dfs(ax,ay,0);
cout<<ans;
}
return 0;
}