能将下面的代码换一种算法实现吗
#include<bits/stdc++.h>
using namespace std;
struct node
{
int x,y;
};
int n,m,cc,dd,ww,ee,dp[1010][1010],tx[4]={0,1,0,-1},ty[4]={1,0,-1,0};
char c[1010][1010];
bool b[1010][1010],f;
void dfs(int x,int y,int o)
{
dp[x][y]=o;
for(int i=max(x-2,1);i<=min(x+2,n);i++)
for(int j=max(y-2,1);j<=min(y+2,m);j++)
{
if(i==x&&j==y) continue;
if(dp[i][j]<=o) continue;
if(c[i][j]=='#') continue;
dp[i][j]=o+1;
}
for(int i=0;i<4;i++)
{
int nx=tx[i]+x;
int ny=ty[i]+y;
if(nx<1||nx>n||ny<1||ny>m||c[nx][ny]=='#'||b[nx][ny]==1) continue;
b[nx][ny]=1;
dfs(nx,ny,o);
}
}
int main()
{
memset(dp,127/3,sizeof(dp));
cin>>n>>m>>cc>>dd>>ww>>ee;
dp[cc][dd]=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
scanf("%s",&c[i][j]);
}
for(int k=0;;k++)
{
f=0;
if(dp[ww][ee]<1000000)
{
cout<<dp[ww][ee]<<endl;
return 0;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
if(dp[i][j]==k&&b[i][j]==0) dfs(i,j,k),f=1;
}
if(f==0) break;
}
cout<<-1;
return 0;
}