您的位置:首页 > 其它

poj 3278 Catch That Cow

2012-07-16 19:56 162 查看
第一次写bfs就扼杀在RE中,一直不明白为什么数组会小呢?题目给的就是100000的,最后我愤怒地开了400001,果断的就AC了。晕。。。。

题目的意思是:从N开始有三种操作n+1,n-1,2*n直到等于k,输出最短路径所需的步数。一看就知道要用BFS.

代码:

#include<iostream>

#include<cmath>

#include<queue>

using namespace std;

queue<int>q;

int visit[400001],dist[400001];

int main()

{

int i,j,n,k,a,count;

while(scanf("%d%d",&n,&k)!=EOF)

{

count=0;

memset(visit,0,sizeof(visit));

memset(dist,0,sizeof(dist));

while(!q.empty()) q.pop();

q.push(n);

visit
=1;

if(n==k){ printf("0\n");continue;}

while(!q.empty())

{

a=q.front();

q.pop();

if(a==k) {cout<<dist[k]<<endl;break;}

if(!visit[a-1]&&a-1>=0&&a<=200001)

{

dist[a-1]=dist[a]+1;

visit[a-1]=1;

q.push(a-1);

}

if(!visit[a+1]&&a+1>=0&&a+1<200001)

{

dist[a+1]=dist[a]+1;

visit[a+1]=1;

q.push(a+1);

}

if(!visit[a*2]&&a*2>=0&&a*2<200001)

{

dist[a*2]=dist[a]+1;

visit[a*2]=1;

q.push(a*2);

}

}

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: