POJ3278 ACM

GCC-pig 2011-03-24 07:08:21
http://poj.org/problem?id=3278

谁能帮我看看这个程序哪里有问题?为什么总是runningtime error
#include <iostream>
#include <queue>
#include <cstdio>

using namespace std;

struct node
{
int value;
int sign;
int step;
};

node num[200008];

void Init()
{
for(int i=0;i<200008;i++)
{
num[i].sign=0;
num[i].step=0;
num[i].value=i;
}
}

int bfs(int sta , int end)
{
if(sta==end)
{
return 0;
}
queue <node> que;
num[sta].sign=1;
que.push(num[sta]);
while(!que.empty())
{
int x;
node temp;
temp=que.front();
que.pop();
x=temp.value;
if(num[x*2].sign==0)
{
num[x*2].step=num[x].step+1;
num[x*2].sign=1;
if(num[x*2].value==end)
return num[x*2].step;
que.push(num[x*2]);
}
if(num[x-1].sign==0)
{
num[x-1].step=num[x].step+1;
num[x-1].sign=1;
if(num[x-1].value==end)
return num[x-1].step;
que.push(num[x-1]);
}
if(num[x+1].sign==0)
{
num[x+1].step=num[x].step+1;
num[x+1].sign=1;
if(num[x+1].value==end)
return num[x+1].step;
que.push(num[x+1]);
}
}
}
int main()
{
int n,k;
while(scanf("%d%d",&n,&k)!=EOF)
{
if(n>k)
{
int temp=n;
n=k;
k=temp;
}
Init();
printf("%d\n",bfs(n,k));
}
return 0;
}
...全文
93 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
logiciel 2011-03-25
  • 打赏
  • 举报
回复
要保证下标在允许范围内才能避免runningtime error.以下修改ac:
#include <iostream>
#include <queue>
#include <cstdio>

using namespace std;

struct node
{
int value;
int sign;
int step;
};

#define MAXNUM 100001
node num[MAXNUM];//node num[200008]; 根据题目条件,100001就够了

void Init()
{
for(int i=0;i<MAXNUM;i++) //for(int i=0;i<200008;i++)
{
num[i].sign=0;
num[i].step=0;
num[i].value=i;
}
}

int bfs(int sta , int end)
{
if(sta==end)
{
return 0;
}
queue <node> que;
num[sta].sign=1;
que.push(num[sta]);
while(!que.empty())
{
int x;
node temp;
temp=que.front();
que.pop();
x=temp.value;
if (x<0) continue; //added
if((x*2)<MAXNUM && num[x*2].sign==0)//if(num[x*2].sign==0)
{
num[x*2].step=num[x].step+1;
num[x*2].sign=1;
if(num[x*2].value==end)
return num[x*2].step;
que.push(num[x*2]);
}
if((x-1) < MAXNUM && num[x-1].sign==0) //if(num[x-1].sign==0)
{
num[x-1].step=num[x].step+1;
num[x-1].sign=1;
if(num[x-1].value==end)
return num[x-1].step;
que.push(num[x-1]);
}
if((x+1) < MAXNUM && num[x+1].sign==0) //if(num[x+1].sign==0)
{
num[x+1].step=num[x].step+1;
num[x+1].sign=1;
if(num[x+1].value==end)
return num[x+1].step;
que.push(num[x+1]);
}
}
return 0;//added
}
int main()
{
int n,k;
scanf("%d%d",&n,&k);//while(scanf("%d%d",&n,&k)!=EOF) 只有一组输入,不需while
//{
//if(n>k) 不需交换
//{
//int temp=n;
//n=k;
//k=temp;
//}
Init();
printf("%d\n",bfs(n,k));
//}
return 0;
}

GCC-pig 2011-03-25
  • 打赏
  • 举报
回复
只是一道ACM程序设计题目,我想知道哪里有错误?
chengjianyong87 2011-03-24
  • 打赏
  • 举报
回复
我试了之后才知道,不知道在干什么啊~
chengjianyong87 2011-03-24
  • 打赏
  • 举报
回复
我试了一下,在VC6上可以运行啊
新铺村长 2011-03-24
  • 打赏
  • 举报
回复
不晓得楼主的意义何在!
宁谧青风 2011-03-24
  • 打赏
  • 举报
回复
貌似 没能在那 找到会员的解答代码

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧