80分是怎么回事???
  • 板块学术版
  • 楼主czhusi
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/10/21 21:15
  • 上次更新2024/10/21 22:34:43
查看原帖
80分是怎么回事???
1050375
czhusi楼主2024/10/21 21:15

题目

me的垃圾代码me的垃圾代码

#include <bits/stdc++.h>

using namespace std;

const int N = 1e2 + 10;

int n, m, sx, sy, sw, ans = INT_MAX, dis[N][N][100], d[4][2] = {{-1, 0}, {0, -1}, {1, 0}, {0, 1}};

char c[N][N];

void dfs(int x, int y, int w, int s) {
    if (dis[x][y][w] <= s || ans <= s){
        return;
    }
    dis[x][y][w] = s;
    if (c[x][y] == 'F'){
        ans = min(ans, dis[x][y][w]);
    }
    bool f = 0;
    if (c[x + d[w][0]][y + d[w][1]] == '#' || c[x + d[w][0]][y + d[w][1]] == 'F') {
        f = 1;
        dfs(x + d[w][0], y + d[w][1], w, s);
    }
    if (c[x + d[(w + 1) % 4][0]][y + d[(w + 1) % 4][1]] == '#' || c[x + d[(w + 1) % 4][0]][y + d[(w + 1) % 4][1]] == 'F') {
        f = 1;
        dfs(x + d[(w + 1) % 4][0], y + d[(w + 1) % 4][1], (w + 1) % 4, s + 1);
    }
    if (c[x + d[(w + 3) % 4][0]][y + d[(w + 3) % 4][1]] == '#' || c[x + d[(w + 3) % 4][0]][y + d[(w + 3) % 4][1]] == 'F') {
        f = 1;
        dfs(x + d[(w + 3) % 4][0], y + d[(w + 3) % 4][1], (w + 3) % 4, s + 5);
    }
    if (!f && (c[x + d[(w + 2) % 4][0]][y + d[(w + 2) % 4][1]] == '#' || c[x + d[(w + 2) % 4][0]][y + d[(w + 2) % 4][1]] == 'F')) {
        dfs(x + d[(w + 2) % 4][0], y + d[(w + 3) % 4][1], (w + 2) % 4, s + 10);
    }
}

int main() {
    cin >> n >> m;
    int x = 0, y = 0, k = 0;
    for (int i = 1; i <= n; i++){
        for (int j = 1; j <= m; j++) {
            cin >> c[i][j];
            if (c[i][j] == 'N'){
                x = i;
                y = j;
                k = 0;
            }
            if (c[i][j] == 'W'){
                x = i;
                y = j;
                k = 1;
            }
            if (c[i][j] == 'S'){
                x = i;
                y = j;
                k = 2;
            }
            if (c[i][j] == 'E'){
                x = i;
                y = j;
                k = 3;
            }
        }
    }
    for(int i = 0; i <= 50; i++){
        for(int j = 0; j <= 50; j++){
            for(int z = 0; z <= 5; z++){
                dis[i][j][z] = INT_MAX;
            }
        }
    }
    dfs(x, y, k, 0);
    cout << ans;
    return 0;
}

请求巨佬救助请求巨佬救助 qwqqwq

2024/10/21 21:15
加载中...