玄关求调

P1825 [USACO11OPEN] Corn Maze S

我觉得(不一定对),你在进入while之前vis[start.x][start.y]=1;后面又if(vis[x][y])好像一定退出循环了……
by wang_ly_ly @ 2024-02-08 20:58:23


@[wang_ly_ly](/user/748723) 改了,但还是错的。关注了 ``` #include<bits/stdc++.h> using namespace std; const int maxn=305; int n,m,ans=INT_MAX; bool vis[maxn][maxn]; char aaa[maxn][maxn]; int dx[]={0,1,-1,0,0},dy[]={0,0,0,1,-1}; struct cs { int xx1,yy1,xx2,yy2; }c[130]; struct node { int x,y,t; }start ,endnode; queue<node>qu; void bfs() { qu.push(start); vis[start.x][start.y]=1; while(!qu.empty()) { int x=qu.front().x,y=qu.front().y,t=qu.front().t; qu.pop(); if(endnode.x==x&&endnode.y==y) { ans=min(ans,t); } if(aaa[x][y]>='A'&&aaa[x][y]<='Z') { if(x==c[aaa[x][y]].xx1&&y==c[aaa[x][y]].yy1) { int xx1=c[aaa[x][y]].xx1,yy1=c[aaa[x][y]].yy1; if(!vis[xx1][yy1]) { qu.push(node{xx1,yy1,t}); vis[xx1][yy1]=1; continue; } } else { int xx2=c[aaa[x][y]].xx2,yy2=c[aaa[x][y]].yy2; if(!vis[xx2][yy2]) { qu.push(node{xx2,yy2,t}); vis[xx2][yy2]=1; continue; } } } for(int i=1;i<=4;i++) { int nx=dx[i]+x,ny=dy[i]+y; if(vis[nx][ny]||nx<1||ny<1||nx>n||ny>n) { continue; } vis[nx][ny]=1; qu.push(node{nx,ny,t+1}); } } } int main() { cin>>n>>m; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { char q; cin>>q; aaa[i][j]=q; if(q=='#') { vis[i][j]=1; } if(q>='A'&&q<='Z') { if(!c[q].xx1) { c[q].xx1=i,c[q].yy1=j; } else { c[q].xx2=i,c[q].yy2=j; } } if(q=='@') { start.x=i; start.y=j; start.t=0; } if(q=='=') { endnode.x=i; endnode.y=j; } } } bfs(); cout<<ans; return 0; }
by dongrunxuan @ 2024-02-09 08:48:51


@[dongrunxuan](/user/959582) 你有没有RE?
by wang_ly_ly @ 2024-02-09 12:41:06


如果有的话(我觉得没影响) vis[nx][ny]||nx<1||ny<1||nx>n||ny>n,先判有没有超过
by wang_ly_ly @ 2024-02-09 12:43:21


~~~ if(endnode.x==x&&endnode.y==y) { ans=min(ans,t); } ~~~ 我觉得你到终点了就return了吧
by wang_ly_ly @ 2024-02-09 12:45:35


啊,不不不,是continue
by wang_ly_ly @ 2024-02-09 13:22:08


~~~ if(x==c[aaa[x][y]].xx1&&y==c[aaa[x][y]].yy1) { int xx1=c[aaa[x][y]].xx1,yy1=c[aaa[x][y]].yy1; ~~~ 你这个当前是1,不应该变成2吗? 我不太理解
by wang_ly_ly @ 2024-02-09 14:04:59


@[wang_ly_ly](/user/748723) 没有RE,其余的问题都改了,[戳这里](https://www.luogu.com.cn/record/146765719)
by dongrunxuan @ 2024-02-13 10:54:46


@[dongrunxuan](/user/959582) 我看不到代码啊
by wang_ly_ly @ 2024-02-13 12:53:47


@[wang_ly_ly](/user/748723) ``` #include<bits/stdc++.h> using namespace std; const int maxn=305; int n,m,ans=INT_MAX; bool vis[maxn][maxn]; char aaa[maxn][maxn]; int dx[]={0,1,-1,0,0},dy[]={0,0,0,1,-1}; struct cs { int xx1,yy1,xx2,yy2; }c[130]; struct node { int x,y,t; }start ,endnode; queue<node>qu; void bfs() { qu.push(start); vis[start.x][start.y]=1; while(!qu.empty()) { int x=qu.front().x,y=qu.front().y,t=qu.front().t; qu.pop(); if(endnode.x==x&&endnode.y==y) { ans=min(ans,t); continue; } if(aaa[x][y]>='A'&&aaa[x][y]<='Z') { if(x==c[aaa[x][y]].xx2&&y==c[aaa[x][y]].yy2) { int xx1=c[aaa[x][y]].xx1,yy1=c[aaa[x][y]].yy1; if(!vis[xx1][yy1]) { qu.push(node{xx1,yy1,t}); vis[xx1][yy1]=1; continue; } } else { int xx2=c[aaa[x][y]].xx2,yy2=c[aaa[x][y]].yy2; if(!vis[xx2][yy2]) { qu.push(node{xx2,yy2,t}); vis[xx2][yy2]=1; continue; } } } for(int i=1;i<=4;i++) { int nx=dx[i]+x,ny=dy[i]+y; if(vis[nx][ny]||nx<1||ny<1||nx>n||ny>n) { continue; } vis[nx][ny]=1; qu.push(node{nx,ny,t+1}); } } } int main() { cin>>n>>m; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { char q; cin>>q; aaa[i][j]=q; if(q=='#') { vis[i][j]=1; } if(q>='A'&&q<='Z') { if(!c[q].xx1) { c[q].xx1=i,c[q].yy1=j; } else { c[q].xx2=i,c[q].yy2=j; } } if(q=='@') { start.x=i; start.y=j; start.t=0; } if(q=='=') { endnode.x=i; endnode.y=j; } } } bfs(); cout<<ans; return 0; }
by dongrunxuan @ 2024-02-13 15:02:20


| 下一页