dfs80分求助
  • 板块P2802 回家
  • 楼主Man_CCNU
  • 当前回复1
  • 已保存回复1
  • 发布时间2021/11/30 12:23
  • 上次更新2023/11/3 23:14:15
查看原帖
dfs80分求助
524191
Man_CCNU楼主2021/11/30 12:23
#include<iostream>
#include<queue>

using namespace std;

const int N = 10 + 10;
int a[N][N], dx[4] = { -1,1,0,0 }, dy[4] = { 0,0,-1,1 }, n, m, cur, sx, sy, res;
bool f[N][N];
queue<int> que;

void dfs(int x, int y, int hp, int dep)
{
    if (hp <= 0||dep>=res) return;
    if (a[x][y] == 3) {
        res = min(res, dep);
        return;
    }
    int tem = hp;
    f[x][y] = 1;
    if (a[x][y] == 4) {
         hp = 6;
    }
    for (int i = 0; i <= 3; i++) {
        int newx = x + dx[i];
        int newy = y + dy[i];

        if (0 < newx && newx <= n && 0 < newy && newy <= m && !f[x + dx[i]][y + dy[i]] && a[x + dx[i]][y + dy[i]] != 0)
            dfs(x + dx[i], y + dy[i], hp - 1, dep + 1);
    }
    f[x][y] = 0;
    if (a[x][y] == 4) hp = tem;

    return;
}
int main()
{
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            cin >> a[i][j];
            if (a[i][j] == 2) sx = i, sy = j;
        }
    }
    res = 1e9;
    cur = 6;
    dfs(sx, sy, cur, 0);
    if (res == 1e9) cout << -1 << endl;
    else cout << res << endl;

    return 0;
}
2021/11/30 12:23
加载中...