50分求助

P2298 Mzc和男家丁的游戏

数组v炸了 ~~(m*n<=6000)~~
by ABANDON_AC @ 2022-05-09 22:16:50


@[A宋锦瑞A](/user/467443)
by ABANDON_AC @ 2022-05-09 22:17:22


十分感谢
by A宋锦瑞A @ 2022-05-09 22:23:21


但还是1,6,7,8,10测试点出错
by A宋锦瑞A @ 2022-05-09 22:24:33


WA
by A宋锦瑞A @ 2022-05-09 22:26:24


算了,你康康这个吧。 ```cpp #include<iostream> #include<queue> using namespace std; struct Pos { int x,y; }; queue <Pos> q; int n,m,x,y,tx,ty,dis[1001][1001],s_a,s_b,t_a,t_b; const int dx[]={1,-1,0,0}; const int dy[]={0,0,1,-1}; char mp[1001][1001]; bool vis[1001][1001]; int bfs(int sx,int sy) { q.push((Pos){sx,sy}); vis[sx][sy]=true; while(!q.empty()) { x=q.front().x; y=q.front().y; q.pop(); if(mp[x][y]=='m') return dis[x][y]; for(int i=0;i<4;i++) { tx=x+dx[i]; ty=y+dy[i]; if(tx<=0||tx>n||ty<=0||ty>m) continue; if(mp[tx][ty]=='#'||vis[tx][ty]==true) continue; dis[tx][ty]=dis[x][y]+1; vis[tx][ty]=true; q.push((Pos){tx,ty}); } } return -1; } int main() { cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { cin>>mp[i][j]; if(mp[i][j]=='d') { s_a=i; s_b=j; } } int c; c=bfs(s_a,s_b); if(c==-1)cout<<"No Way!"<<endl; else cout<<c<<endl; return 0; } ```
by ABANDON_AC @ 2022-05-09 22:27:09


@[A宋锦瑞A](/user/467443)
by ABANDON_AC @ 2022-05-09 22:31:02


|