POJ 3278 / HDU 2717 Catch That Cow(簡單BFS)

 

給定兩個整數 n 和 k ,有 n+1或n-1或n*2 這3種操作,求使得 n==k 最少的操作次數其中(0≤n≤1e5) 

const int N=1e5;

    int n,m,t;
    int i,j,k;
    int a[N+5];
    bool vis[N+5];
    
int main()
{
    //IOS;
    int num=0;
    while(sdd(n,k)==2){
        queue<int> q;
        q.push(n);
        ms(vis,0);
        ms(a,0);
        while(!q.empty()){
            int x=q.front();
            q.pop();
            if(x==k){
                pd(a[x]);
                break;
            }
            if(x-1>=0 && !vis[x-1]){
                vis[x-1]=1;
                q.push(x-1);
                a[x-1]=a[x]+1;
            }
            if(x+1<=N && !vis[x+1]){
                vis[x+1]=1;
                q.push(x+1);
                a[x+1]=a[x]+1;
            }
            if(2*x<=N && !vis[x<<1]){
                vis[x<<1]=1;
                q.push(x<<1);
                a[x<<1]=a[x]+1;
            }
        }
    }
    //PAUSE;
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章