永发信息网

为什么我的程序一直RE啊??

答案:2  悬赏:60  手机版
解决时间 2021-03-02 03:54
  • 提问者网友:末路
  • 2021-03-01 16:27
题目 http://www.bnuoj.com/bnuoj/problem_show.php?pid=4060
代码
//Plants vs. Zombies#include #include int main(){ int a[99999],b[99999],c[21]; int N,n,i,j,x; scanf ("%d",&N); for (x=0;x为什么一直RE啊!!!
最佳答案
  • 五星知识达人网友:白昼之月
  • 2021-03-01 17:01
Runtime error有两种可能,一是你在main函数里开了两个大数组把栈空间给撑爆了,你可以把a,b改成全局变量试试。另外是数组越界了,n最大有10^6,你a,b数组只开了10^5-1。
不过题目写了内存限制是2MB,估计改全局变量一样超。。
哦,这就是你为什么数组只开10^5的原因吧。。
想想怎么优化算法吧:)可能要用哈希表
全部回答
  • 1楼网友:骨子里都是戏
  • 2021-03-01 18:25
re不是因为你的算法和数据有错,而是因为迭代次数过多,导致内存溢出。 你可以把bfs(你原来那个写法貌似是dfs)改成非迭代模式,用队列来模拟 #include #include using namespace std; char map[2000][2000]; int n; struct point { int x; int y; }; queue q; void bfs(int x,int y) { point p = {x,y}; map[x][y] = '.'; q.push(p); while(!q.empty()) { p = q.front(); q.pop(); x = p.x; y = p.y; if(x>1 && x<=n && y>=1 && y<=n && map[x-1][y] == '*') { map[x-1][y] = '.'; p.x = x-1; p.y = y; q.push(p); } if(x>=1 && x=1 && y<=n && map[x+1][y] == '*') { map[x+1][y] = '.'; p.x = x+1; p.y = y; q.push(p); } if(x>=1 && x<=n && y>=1 && y=1 && x<=n && y>1 && y<=n && map[x][y-1] == '*') { map[x][y-1] = '.'; p.x = x; p.y = y-1; q.push(p); } } } int main() { while(cin>>n) { int i,j,cou=0; getchar(); for(i=1;i<=n;i++) for(j=1;j<=n;j++) cin>>map[i][j]; for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(map[i][j]=='*') { cou++; bfs(i,j); } cout<
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯