poj3278广度优先搜索(BFS)

来源:互联网 发布:淘宝买家恶意申请退款 编辑:程序博客网 时间:2024/06/10 01:07

        哎,还是在看了人家的代码情况下才做出来的,尴尬没事,能学会就行啦,用的是c++上的stl中的函数,定义的队列,比C语言上自己定义好用多了,嘿嘿,poj上的题目真不简单,比其他oj要难我觉得,起码是比hdu oj的要难,鄙视毕竟这是北大的难过,总是不会单纯的考察某个方法好像,这个题就有好多细节要考虑的,比如说时间问题,比如说要开数组大小问题,还有,不能把所有的数都存进去,否则可能会RE,明天继续找bfs练练手。

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<queue>using namespace std;int d[300000],visit[300000];int bfs(int x,int y){queue<int>q;q.push(x);d[x]=0;visit[x]=1;while(!q.empty()){x=q.front();q.pop();         if(x==y)return d[x];else{if(x-1>=0&&x-1<=100005&&visit[x-1]!=1){q.push(x-1);d[x-1]=d[x]+1;visit[x-1]=1;}if(x+1>=0&&x+1<=100005&&visit[x+1]!=1){q.push(x+1);d[x+1]=d[x]+1;visit[x+1]=1; }if(2*x>=0&&2*x<=100005&&visit[2*x]!=1){q.push(2*x);d[2*x]=d[x]+1;visit[2*x]=1;}} }}int main(){int x,y; while(scanf("%d%d",&x,&y)!=EOF){memset(d,0,sizeof(d));memset(visit,0,sizeof(visit));printf("%d\n",bfs(x,y));    }return 0;}


0 0