社区讨论
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 条回复,欢迎继续交流。
正在加载回复...