[POJ 3278] Catch That Cow

[POJ 3278] Catch That Cow

题目链接:http://poj.org/problem?id=3278

题目理解:

从当前点N,到点K,可以选择的方式有三种,分别是:当前位置+1,当前位置-1,当前位置×2;

求走的最少步数。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<queue>
 4 #include<cstring>
 5 using namespace std;
 6 
 7 bool vis[200100];
 8 int n,k;
 9 struct node
10 {
11     int x,step;
12 };
13 
14 void bfs(int n,int k)
15 {
16     queue<node> Q;
17     node s,sx;
18     s.x = n;s.step = 0;
19     Q.push(s);
20     while(!Q.empty())
21     {
22         s = Q.front();
23         Q.pop();
24         if(s.x == k)
25         {
26             printf("%d\n",s.step);
27             return ;
28         }
29         else
30         {
31             //用一个中间变量sx的原因是在三个if全部判断完之前不改变当前状态的变量的值;
32             if(s.x>0&&!vis[s.x-1])
33             {
34                 sx.x = s.x - 1;
35                 sx.step = s.step + 1;
36                 vis[s.x-1] = 1;
37                 Q.push(sx);
38             }
39             if(s.x<=k&&!vis[s.x+1])
40             {
41                 sx.x = s.x + 1;
42                 sx.step = s.step + 1;
43                 vis[s.x+1] = 1;
44                 Q.push(sx);
45             }
46             if(s.x<=k&&!vis[2*s.x])
47             {
48                 sx.x = 2 * s.x;
49                 sx.step = s.step + 1;
50                 vis[2*s.x] = 1;
51                 Q.push(sx);
52             }
53         }
54     }
55 }
56 
57 int main()
58 {
59     while(scanf("%d%d",&n,&k)!=EOF)
60     {
61         memset(vis,0,200100);
62         bfs(n,k);
63     }
64     return 0;
65 }

 

posted @ 2019-01-05 11:03 Youpeng 阅读( ...) 评论( ...) 编辑 收藏
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值