实在不会了,求救!
  • 板块P2802 回家
  • 楼主rochcim
  • 当前回复6
  • 已保存回复6
  • 发布时间2021/11/10 14:39
  • 上次更新2023/11/4 00:58:40
查看原帖
实在不会了,求救!
532067
rochcim楼主2021/11/10 14:39
#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
using namespace std;
struct coord {
    int x, y, b;
};
int walk[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
queue<coord> Q;
int main () {
    int n, m;
    int ans[10][10], rec[10][10], visit[10][10];
    memset(ans, -1, sizeof(ans));
    memset(visit, -1, sizeof(ans));
    cin >> n >> m;
    coord tmp;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++) { 
            int k;
            cin >> k;
            if (k == 2) 
                tmp = {i, j, 6};
            rec[i][j] = k;
        }
    ans[1][1] = 0;
    Q.push(tmp);
    while (!Q.empty()) {
        coord u = Q.front();
        Q.pop();
        int ux = u.x, uy = u.y, ub = u.b;
        for (int i = 0; i < 4; i++) {
            int x = ux + walk[i][0];
            int y = uy + walk[i][1];
            if (x >= 1 && x <= n && y >= 1 && y <= m && rec[x][y] != 0 && visit[x][y] < ub - 1) {
                ans[x][y] = ans[ux][uy] + 1;
                ub--;
                visit[x][y] = ub;
                if (rec[x][y] == 4)
                    ub = 6;
                if (ub == 1) continue;
                if (rec[x][y] == 3) {
                    cout << ans[x][y] << endl;
                    return 0;
                }
                tmp = {x, y, ub};
                Q.push(tmp);
            }
        }
    }
    cout << -1 << endl;
    return 0;
}
帮看,谢谢!
2021/11/10 14:39
加载中...