最短路径 矩阵 dfs 有障碍

游戏地图路径

https://www.nowcoder.com/practice/a4b7f297ad0e46a0a1fbac4d2da83a63?tab=note

alt

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;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
02-14 11:10
点赞 评论 收藏
分享
野猪不是猪🐗:是我导致的,我前天对力扣进行了跨站脚本攻击,网站把我的请求给block了(胡言乱语)
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客企业服务