1 条题解

  • 1
    @ 2024-7-25 13:36:07
    #include <bits/stdc++.h>
    using namespace std;
    #define ls u << 1
    #define rs u << 1 | 1
    #define LL long long
    #define int long long
    #define PII pair <int, int>
    #define fi first
    #define se second
    #define pub push_back
    #define pob pop_back
    #define puf push_front
    #define pof pop_front
    #define lb lower_bound
    #define ub upper_bound
    #define i128 __int128
    #define pcnt(x) __builtin_popcount(x)
    #define mem(a,goal) memset(a, (goal), sizeof(a))
    #define rep(x,start,end) for(int x = (start) - ((start) > (end)); x != (end) - ((start) > (end)); ((start) < (end) ? x ++ : x --))
    #define aLL(x) (x).begin(), (x).end()
    #define sz(x) (int)(x).size()
    const int INF = 998244353;
    const int mod = 1e9 + 7;
    const int N = 1010;
    int g[N][N], dis[N][N];
    int dx[] = {0, 1, 0, -1};
    int dy[] = {1, 0, -1, 0};
    int n, m;
    void bfs(int a, int b)
    {
        memset(dis, -1, sizeof(dis));
        dis[a][b] = 0;
        queue<PII> q;
        q.push({a, b});
        while(q.size())
        {
            PII t = q.front();
            q.pop();
            for(int i = 0; i < 4; ++ i)
            {
                int x = t.first + dx[i], y = t.second + dy[i];
                if(x >= 0 && x < n && y >= 0 && y < m && dis[x][y] == -1 && g[x][y] == 0)
                {
                    dis[x][y] = dis[t.first][t.second] + 1;
                    q.push({x, y});
                }
            }
        }    
        cout << dis[n - 1][m - 1] << '\n';
    }
    void solve()
    {
        scanf("%lld%lld", &n, &m);
        for(int i = 0; i < n; ++ i)
            for(int j = 0; j < m; ++ j)
                scanf("%lld", &g[i][j]);
        bfs(0, 0);
    }
    
    signed main()
    {
        int t = 1;
        while (t --) solve();
        return 0;
    }
    
    • 1

    信息

    ID
    90
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    10
    已通过
    4
    上传者