#include<bits/stdc++.h>
using namespace std;
int f[101][101],a[101][101],i,j,n,m,x,y,q,w;
void dfs(int x,int y,int k){
if(f[x][y]<k)return;
f[x][y]=k;
dfs(x+1,y,k+1);
dfs(x,y+1,k+1);
dfs(x-1,y,k+1);
dfs(x,y-1,k+1);
}
int main(){
cin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++){
cin>>a[i][j];
if(a[i][j]==0)f[i][j]=0;
else f[i][j]=200000000;
}
cin>>x>>y>>q>>w;
dfs(x,y,1);
cout<<f[q][w];
return 0;
}
Sample input:
5 5
1 0 1 1 1
1 0 0 0 1
1 0 1 0 1
1 0 1 0 1
1 1 1 1 1
1 1 1 3
Sample output:
15
很神奇是不是,通常是用队列求最短路,是不是焕然一新的感觉,且队列不优化:空间最高O(ans*4),时间最高O(n*4*4),而DFS:
O(n*n)&O(n*n-0的数量)