社区讨论

59分求条

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

讨论操作

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

当前回复
3 条
当前快照
1 份
快照标识符
@mmai26br
此快照首次捕获于
2026/03/03 19:03
5 天前
此快照最后确认于
2026/03/06 20:05
前天
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
queue<pair<pair<int,int>,int>> que;
int n,m,fx[]={0,0,1,-1},fy[]={1,-1,0,0},vis[310][310],qx,qy;
char c[310][310];
pair<int,int> cs(int x,int y){
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(c[i][j]==c[x][y] && (i!=x || j!=y)) return {i,j};
        }
    }
}
int main(){
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++) scanf("%s",c[i]);
    for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(c[i][j]=='@') qx=i,qy=j;
    que.push({{qx,qy},0});
    vis[qx][qy]=1;
    while(!que.empty()){
        auto now=que.front();
        que.pop();
        int nx=now.first.first,ny=now.first.second,nt=now.second;
        if(c[nx][ny]=='='){
            printf("%d",nt);
            return 0;
        }
        for(int k=0;k<4;k++){
            int dx=nx+fx[k],dy=ny+fy[k];
            if(vis[dx][dy] || c[dx][dy]=='#' || dx<0 || dx>=n || dy<0 || dy>=m) continue;
            vis[dx][dy]=1;
            if(c[dx][dy]>='A' && c[dx][dy]<='Z'){
                auto cy=cs(dx,dy);
                dx=cy.first;
                dy=cy.second;
                if(!vis[dx][dy]){
                    que.push({{dx,dy},nt+1});
                    vis[dx][dy]=1;
                }
            }
            else que.push({{dx,dy},nt+1});
        }
    }
    return 0;                                   
}

回复

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

正在加载回复...