hdu2717 简单广搜

来源:互联网 发布:网络配电箱 编辑:程序博客网 时间:2024/05/07 16:01
step[],记录到目标位置的层数;
#include<cstdio>#include<iostream>#include<stdlib.h>#include<ctype.h>#include<algorithm>#include<cmath>#include<cstring>#include<queue>using namespace std;int N,K;int ans;int visit[200010];int step[200010];void bfs(){   queue<int> q;   q.push(N);   int tmp;    visit[N]=1;   while(!q.empty()){       tmp=q.front();       if(tmp==K)         return;       q.pop();       if(tmp+1<=100000&&!visit[tmp+1])//没有此限制条件就会超内存      {         visit[tmp+1]=1;         q.push(tmp+1);         step[tmp+1]=step[tmp]+1;       }       if(tmp-1>=0&&!visit[tmp-1])//如果将tmp-1>=0改为tmp-1<=1000000则会runtime error     {           visit[tmp-1]=1;           q.push(tmp-1);           step[tmp-1]=step[tmp]+1;       }       if(tmp*2<=200000&&!visit[2*tmp]){         visit[2*tmp]=1;         q.push(2*tmp);         step[tmp*2]=step[tmp]+1;       }}}int main(){    while(cin>>N>>K){        for(int i=0;i<200010;i++)           step[i]=visit[i]=0;        bfs();        cout<<step[K]<<endl;    }    return 0;}

原创粉丝点击