社区讨论

53分求调

P1825[USACO11OPEN] Corn Maze S参与者 1已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mhji336x
此快照首次捕获于
2025/11/04 02:55
4 个月前
此快照最后确认于
2025/11/04 02:55
4 个月前
查看原帖

在线等,非常急

代码如下:
CPP
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
const int N = 400;
char a[N][N];
int ans[N][N], map[N][N], n, m, x, y, fx, fy;
struct sss{
    int x, y;
};
queue<sss> q;
int use[4][2] = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};
void findf(char c, int *x, int *y){
    for (int i = 1; i <= n; i ++ ){
        for (int j = 1; j <= m; j ++ ){
            if (*x != i && *y != j && a[i][j] == c){
                *x = i;
                *y = j;
                return ;
            }
        }
    }
    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] == '@'){
                x = i, y = j;
                continue;
            }
        }
    }
    memset(map, -1, sizeof(map));
    map[x][y] = 0;
    q.push({x, y});
    while (!q.empty()){
        sss tmp = q.front();
        q.pop();
        int d = ans[tmp.x][tmp.y];
        if (a[tmp.x][tmp.y] == '='){
            cout << d;
            return 0;
        }
        for (int i = 0; i < 4; i ++ ){
            int ux = tmp.x + use[i][0];
            int uy = tmp.y + use[i][1];
            if (map[ux][uy] == -1 && a[ux][uy] != '#'){
                ans[ux][uy] = d + 1;
                map[ux][uy] = 0;
                if (a[ux][uy] >= 'A' && a[ux][uy] <= 'Z'){
                    findf(a[ux][uy], &ux, &uy);
                }
                ans[ux][uy] = d + 1;
                q.push({ux, uy});
            }
        }
    }
    return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...