dfs实现最小路

#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的数量)

点赞