poj - 3278 Catch That Cow

水题,搜索一个数转化成另一个数。

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <queue>
 4 using std::queue;
 5 #define N 100010
 6 int d[N];
 7 bool vis[N];
 8 int m,n,a;
 9 int nxt(int x)
10 {
11     int t;
12     if(x==0) t = a-1;
13     else if(x==1) t=a+1;
14     else t = a<<1;
15     return t;
16 }
17 int bfs()
18 {
19     if(m==n) return 0;
20     int b,i;
21     memset(vis,0,N);
22     queue <int> q;
23     q.push(m);
24     d[m] = 0;
25     vis[m] = 1;
26     while(!q.empty())
27     {
28         a = q.front();
29         q.pop();
30         for(i = 0; i < 3; i++)
31         {
32             b = nxt(i);
33             if(b >= 0 && b <= 100000 && !vis[b])
34             {
35                 if(b == n) return d[a]+1;
36                 q.push(b);
37                 vis[b] = 1;
38                 d[b] = d[a]+1;
39             }
40         }
41     }
42     return -1;
43 }
44 int main()
45 {
46     while(~scanf("%d%d",&m,&n))
47         printf("%d\n",bfs());
48     return 0;
49 }

转载于:https://www.cnblogs.com/lzxskjo/archive/2012/11/08/2761710.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值