c++MLE 10pts求调

P1746 离开中山路

我也是BFS,MLE了,0分 ``` #include<bits/stdc++.h> using namespace std; char ma[1005][1005]; int dx[] = {0,1,0,-1,0},dy[] = {0,0,1,0,-1},n,sx,sy,fx,fy,ans = 0x3f3f3f3f; struct p { int x; int y; int f; int b; }; int main() { cin >> n; for(int i = 1;i <= n;i++) for(int j = 1;j <= n;j++) cin >> ma[i][j]; cin >> sx >> sy >> fx >> fy; queue<p> q; q.push({sx,sy,0,0}); while(!q.empty()) { p t = q.front(); q.pop(); if(t.x < 1 || t.x > n || t.y < 1 || t.y > n || ma[t.x][t.y] == '1') continue; if(t.x == fx && t.y == fy) ans = min(ans,t.b); for(int i = 1;i <= 4;i++) { if(i == t.f) continue; q.push({t.x+dx[i],t.y+dy[i],(i+1)%4+1,t.b+1}); } } cout << ans; return 0; } ```
by xingyu671 @ 2023-12-06 11:46:59


两个都mle了?
by lightme @ 2023-12-12 21:57:19


``` #include <bits/stdc++.h> #define PII pair<int,int> using namespace std; int c[1005][1005],cnt[1005][1005]; int dy[5]={0,-1,1,0}; int dx[5]={1,0,0,-1}; int x,y,xx,yy,n; void bfs(){ //memset(cnt,-1,sizeof cnt); queue<PII>q; q.push({x,y}); int x1,y1,xd,yd; while(!q.empty()){ x1=q.front().first; y1=q.front().second; for(int i=0;i<4;++i){ xd=x1+dx[i]; yd=y1+dy[i]; if(xd>0&&xd<=n&&yd>0&&yd<=n&&c[xd][yd]==0&&cnt[xd][yd]==0){ //if(cnt[xd][yd]>cnt[x1][y1]||cnt[xd][yd]==0){ q.push({xd,yd}); cnt[xd][yd]=cnt[x1][y1]+1; //} //if(cnt[xx][yy]>0) return; } } q.pop(); } } int main(){ cin>>n; for(int i=1;i<=n;++i){ string a; cin>>a; for(int j=0;j<a.size();++j){ c[i][j+1]=a[j]-'0'; } } cin>>x>>y>>xx>>yy; bfs(); cout<<cnt[xx][yy]; } ``` 按照第一个bfs改的
by lightme @ 2023-12-12 22:09:56


``` if(cnt[xd][yd]>cnt[x1][y1]||cnt[xd][yd]==0) ``` 这一句有点多余了因为后面的cnt下一个cnt都是大于前一个的按照bfs的特点来说,所以不需要做一步,估计你过的那个数据点就正好是样例,数据卡好的正好是最后一个数据所以无所谓。后面数据量大了就有问题了这里爆内存的估计是队列爆的,不是这个二维数组所以不用像下一个bfs一样做个结构体。小tip可以后面加个return这样稍微节约一点时间
by lightme @ 2023-12-12 22:13:19


同样bfs,mle了:( ```cpp #include<iostream> #include<cstdio> #include<cmath> #include<queue> #include<cstdlib> using namespace std; int n; int map[1005][1005]; char a[1005][1005]; int x11,y11,x22,y22; int dx[]={0,0,1,-1}; int dy[]={1,-1,0,0}; bool vis[1005][1005]; struct node { int x,y,count; }fir; queue <node>q; int main() { cin>>n; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cin>>a[i][j]; map[i][j]=a[i][j]-'0'; } } cin>>x11>>y11>>x22>>y22; fir.x=x11; fir.y=y11; vis[x11][y11]=1; fir.count=0; q.push(fir); struct node top; while(q.empty()==0) { top=q.front();//cout<<top.x<<" "<<top.y<<endl; q.pop(); if(top.x==x22&&top.y==y22)goto what; for(int i=0;i<4;i++) { struct node nxt; nxt.x=top.x+dx[i]; nxt.y=top.y+dy[i]; if(nxt.x<1||nxt.x>n||nxt.y<1||nxt.y>n)continue; if(map[nxt.x][nxt.y]==1)continue; if(vis[nxt.x][nxt.y]==1)continue; nxt.count=top.count+1; vis[top.x][top.y]=1; q.push(nxt); } } what: cout<<top.count; return 0; }
by ARTI001 @ 2024-01-04 11:59:13


|