多学习。

【BFS】AcWing844. 走迷宫

AcWing844.走迷宫

题解

stl

#include <iostream>
#include <cstring>
#include <queue>

using namespace std;

typedef pair<int,int> PII;

const int N = 110;

queue<PII> q;
int g[N][N], n, m, d[N][N], dir[4][2] = {1,0, -1,0, 0,1, 0,-1};

void BFS()
{
    int x, y;
    q.push({1,1});
    d[1][1] = 0;
    while(q.size())
    {
        x = q.front().first, y = q.front().second;
        
        q.pop();
        
        if(x == n && y == m) break;
        
        for(int i = 0; i < 4; ++i)
        {
            int xx = x + dir[i][0], yy = y + dir[i][1];
            if(xx > 0 && xx <= n && yy > 0 && yy <= m && g[xx][yy] != 1 && d[xx][yy] == -1)
                q.push({xx, yy}), d[xx][yy] = d[x][y] + 1;
        }
    }
}

int main()
{
    memset(d, -1, sizeof d);
    cin >> n >> m;
    for(int i = 1; i <= n; ++i)
        for(int j = 1;  j <= m; ++j)
            cin >> g[i][j];
    BFS();
    cout << d[n][m] << endl;
    return 0;
}

数组模拟队列

#include <iostream>
#include <cstdio>

using namespace std;

const int N = 110;

int n, m;
int dir[4][2] = {1, 0, -1, 0, 0, 1, 0, -1};
bool vis[N][N];
int row[N * N], col[N * N], step[N * N], hh, tt = -1, g[N][N];

void BFS()
{
    int x, y, xx, yy, s;
    row[++ tt ] = 1, col[ tt ] = 1, step[tt] = 0;
    while(hh <= tt)
    {
        x = row[hh], y = col[hh], s = step[hh ++ ];
        if(x == n && y == m)
        {
            cout << s << endl;
            return;
        }
        for(int i = 0 ;i < 4; ++i)
        {
            xx = x + dir[i][0], yy = y + dir[i][1];
            if(xx > n || xx <= 0 || yy > m || yy <= 0 || g[xx][yy] == 1 || vis[xx][yy]) continue;
            step[++ tt] = s + 1;
            row[tt] = xx, col[tt] = yy, vis[xx][yy] = true;
        }
    }
}


int main()
{
    cin >> n >> m;
    for(int i = 1; i <= n; ++i)
        for(int j = 1; j <= m; ++j)
            cin >> g[i][j];
    BFS();
    return 0;
}
posted @   czyaaa  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示