目的地路径的最短来源

发布于 2025-01-29 18:30:15 字数 2239 浏览 4 评论 0原文

我正在尝试找到从源到达目的地所需的最小步骤数。为此,我正在使用图形遍历的BFS算法。我认为我已经为BFS算法应用了正确的逻辑,但是当无法从源头达到目标节点时,我没有得到正确的答案。可以,任何人检查我在代码中做错了什么。

int shortestDistance(int N, int M, vector<vector<int>> A, int X, int Y) {
        
        vector<vector<int>>visited(N, vector<int>(M, 0));
        
        visited[0][0] = 1;
        queue<pair<int, int>>qe;
        pair<int, int>pr;
        pr.first = 0;
        pr.second = 0;
        
        qe.push(pr);
        queue<int>count;
        count.push(0);
        
        while(!qe.empty()){
            pair<int, int>pr1 = qe.front();
            qe.pop();
            
            int a = pr1.first;
            int b = pr1.second;
            int cnt = count.front();
            count.pop();
            if(a == X && b == Y){
                return cnt;
            }
            
            if(a-1 >= 0 && A[a][b] == 1 && visited[a-1][b] == 0){
                visited[a-1][b] = 1;
                pair<int, int>pr2;
                pr2.first = a-1;
                pr2.second = b;
                qe.push(pr2);
                
                count.push(cnt+1);
            }
            
            if(a+1 < N && A[a][b] == 1 && visited[a+1][b] == 0){
                visited[a+1][b] = 1;
                pair<int, int>pr2;
                pr2.first = a+1;
                pr2.second = b;
                qe.push(pr2);
                count.push(cnt+1);
            }
            
            
            if(b-1 >= 0 && A[a][b] == 1 && visited[a][b-1] == 0){
                visited[a][b-1] = 1;
                pair<int, int>pr2;
                pr2.first = a;
                pr2.second = b-1;
                qe.push(pr2);
                count.push(cnt+1);
            }
            
            if(b+1 < M && A[a][b] == 1 && visited[a][b+1] == 0){
                visited[a][b+1] = 1;
                pair<int, int>pr2;
                pr2.first = a;
                pr2.second = b+1;
                qe.push(pr2);
                count.push(cnt+1);
            }
        }
        
        return -1;
    }
}

I am trying to find the minimum number of steps required to reach to the destination from the source. For this, I am using BFS algorithm of graph traversal. I think I have applied the correct logic for BFS algorithm but I am not getting the correct answer when the destination node cannot be reached from source. Can, anyone check what I have done wrong in the code.

int shortestDistance(int N, int M, vector<vector<int>> A, int X, int Y) {
        
        vector<vector<int>>visited(N, vector<int>(M, 0));
        
        visited[0][0] = 1;
        queue<pair<int, int>>qe;
        pair<int, int>pr;
        pr.first = 0;
        pr.second = 0;
        
        qe.push(pr);
        queue<int>count;
        count.push(0);
        
        while(!qe.empty()){
            pair<int, int>pr1 = qe.front();
            qe.pop();
            
            int a = pr1.first;
            int b = pr1.second;
            int cnt = count.front();
            count.pop();
            if(a == X && b == Y){
                return cnt;
            }
            
            if(a-1 >= 0 && A[a][b] == 1 && visited[a-1][b] == 0){
                visited[a-1][b] = 1;
                pair<int, int>pr2;
                pr2.first = a-1;
                pr2.second = b;
                qe.push(pr2);
                
                count.push(cnt+1);
            }
            
            if(a+1 < N && A[a][b] == 1 && visited[a+1][b] == 0){
                visited[a+1][b] = 1;
                pair<int, int>pr2;
                pr2.first = a+1;
                pr2.second = b;
                qe.push(pr2);
                count.push(cnt+1);
            }
            
            
            if(b-1 >= 0 && A[a][b] == 1 && visited[a][b-1] == 0){
                visited[a][b-1] = 1;
                pair<int, int>pr2;
                pr2.first = a;
                pr2.second = b-1;
                qe.push(pr2);
                count.push(cnt+1);
            }
            
            if(b+1 < M && A[a][b] == 1 && visited[a][b+1] == 0){
                visited[a][b+1] = 1;
                pair<int, int>pr2;
                pr2.first = a;
                pr2.second = b+1;
                qe.push(pr2);
                count.push(cnt+1);
            }
        }
        
        return -1;
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文