BPS基础入门题提交一直runtime error,提交了好多次了

Sean10 2015-02-10 12:41:56
这是POJ3278的那道题,提交到OJ上一直RE,但在自己机子上是能求出结果的。
#include <stdio.h>
#include <stdlib.h>
#define N 100000+10000
int n,k;
int a[N]={0},b[N]={0},vis[N]={0};
int front,end;

void bps(int x){
vis[x]=1;
front=0,end=0;
b[end++]=x;
while(front<end){
x=b[front++];
if(x==k) return;
if(!vis[x*2]&&x<=50000){
vis[x*2]=1;
a[x*2]=a[x]+1;
b[end++]=x*2;
}
if(!vis[x+1]&x<=99999){
vis[x+1]=1;
a[x+1]=a[x]+1;
b[end++]=x+1;
}
if(!vis[x-1]&&x>0){
vis[x-1]=1;
a[x-1]=a[x]+1;
b[end++]=x-1;
}
}
}

int main(){
scanf("%d%d",&n,&k);
bps(n);
printf("%d\n",a[k]);
return 0;
}
...全文
92 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sean10 2015-02-10
  • 打赏
  • 举报
回复
引用 1 楼 FancyMouse 的回复:
首先这词是叫bfs…… 其次吧,!vis[x*2]&&x<=50000这么写是要越界访问的。你得两个条件倒一下。
噢噢,明白了
fly_dragon_fly 2015-02-10
  • 打赏
  • 举报
回复
是bfs吧,RE一般就是越界了
FancyMouse 2015-02-10
  • 打赏
  • 举报
回复
首先这词是叫bfs…… 其次吧,!vis[x*2]&&x<=50000这么写是要越界访问的。你得两个条件倒一下。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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