为什么我的程序一直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<
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯