最短路径 矩阵 dfs 有障碍
游戏地图路径
https://www.nowcoder.com/practice/a4b7f297ad0e46a0a1fbac4d2da83a63?tab=note
using namespace std;
#include<vector>
void dfs(const vector<vector<char>>& vec,int beginX,int beginY,int endX,int endY,const int n,vector<vector<int>>& memory,int count){
if(beginX<0||beginX>=n||beginY<0||beginY>=n) return; // 越界
if(vec[beginX][beginY]=='#'||vec[beginX][beginY]=='@') return; // 障碍
if(memory[beginX][beginY]!=0 && memory[beginX][beginY]<=count) return ; // 已经访问过或者记忆数组记录的距离更小
memory[beginX][beginY]=count; // 记录当前距离
if(beginX==endX && beginY==endY) return; // 到达终点
dfs(vec, beginX-1, beginY, endX, endY, n, memory,count+1);
dfs(vec, beginX+1, beginY, endX, endY, n, memory,count+1);
dfs(vec, beginX, beginY+1, endX, endY, n, memory,count+1);
dfs(vec, beginX, beginY-1, endX, endY, n, memory,count+1);
}
int main(){
int n=0;cin>>n;
vector<vector<char>>vec(n,vector<char>());
int beginX=0;int beginY=0;int endX=0;int endY=0;
cin>>beginY>>beginX>>endY>>endX;
for(int i=0;i<n;i++){
string a;cin>>a;
for(auto it:a){
vec[i].push_back(it);
}
}
vector<vector<int>> memory(n,vector<int>(n,0));
dfs(vec,beginX,beginY,endX,endY,n,memory,1);
if(memory[endX][endY]==0) cout<<-1<<endl;
else cout<<memory[endX][endY]-1<<endl;
return 0;
}