poj3278(bfs)

poj3278(bfs)

http://poj.org/problem?id=3278


额额,bfs嘛,这个数据有点强哈,边界条件要搞清楚才能过呢。。呵呵,不错,bfs:

#include<stdio.h>
#include
<string.h>
#include
<math.h>
int n,k,ans,vis[100005],que[100005];

int bfs()
{
    
int head,tail,now;

    memset(vis,
0,sizeof(vis));

    head
=0;
    tail
=1;
    que[
1]=n;
    vis[n]
=1;

    
while (head<tail)
    {
        head
++;
        now
=que[head];
        
if (now<100000&&!vis[now+1])
        {
            
if (now+1==k)
                
return vis[now];
            tail
++;
            que[tail]
=now+1;
            vis[now
+1]=vis[now]+1;
        }
        
if (now>=1&&!vis[now-1])
        {
            
if (now-1==k)
                
return vis[now];
            tail
++;
            que[tail]
=now-1;
            vis[now
-1]=vis[now]+1;
        }
        
if (now>=1&&2*now<=100000&&!vis[2*now])
        {
            
if (2*now==k)
                
return vis[now];
            tail
++;
            que[tail]
=2*now;
            vis[
2*now]=vis[now]+1;
        }
    }
}

int main()
{
    
while (scanf("%d%d",&n,&k)==2)
    {
        
if (k<=n)
            ans
=n-k;
        
else
            ans
=bfs();
        printf(
"%d\n",ans);
    }
    
return 0;
}


写代码要严谨才行啊,那些变量名什么一定要搞清楚呢!!!
这里就哉了的。

你可能感兴趣的:(poj3278(bfs))