zoukankan      html  css  js  c++  java
  • POJ 3278 Catch That Cow

    解题思路:简单宽搜,关键是剪枝。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<queue>
     5 using namespace std;
     6 const int maxn = 100005;
     7 int vis[maxn]; //标记这个点是否走过
     8 int n, k;
     9 
    10 
    11 struct node{
    12     int x, cnt;
    13 }p, now;
    14 
    15 queue<node> q;
    16 
    17 int bfs(int x, int cnt)
    18 {
    19     memset(vis, 0, sizeof(vis)); //初始化为没走过
    20     while(!q.empty()) q.pop();
    21     p.x = x, p.cnt = cnt;
    22     q.push(p);
    23 
    24     while(!q.empty())
    25     {
    26         p = q.front();
    27         q.pop();
    28 
    29         if(p.x == k) return p.cnt; //走到该点,直接返回步数
    30 
    31         now.x = p.x + 1, now.cnt = p.cnt + 1;
    32         if(now.x <= 100000 && !vis[now.x]) //关键剪枝,没走过并且在符合题目的数据范围之内
    33         {
    34             vis[now.x] = 1; //标记为已经走过
    35             q.push(now);
    36         }
    37 
    38         now.x = p.x - 1, now.cnt = p.cnt + 1;
    39         if(now.x >= 0 && !vis[now.x])
    40         {
    41             vis[now.x] = 1;
    42             q.push(now);
    43         }
    44 
    45         now.x = 2 * p.x, now.cnt = p.cnt + 1;
    46         if(now.x <= 100000 && !vis[now.x])
    47         {
    48             vis[now.x] = 1;
    49             q.push(now);
    50         }
    51     }
    52     return -1; //不会走到这一步
    53 }
    54 
    55 int main()
    56 {
    57     while(~scanf("%d %d", &n, &k))
    58     {
    59         int ans = bfs(n, 0);
    60         printf("%d
    ", ans);
    61     }
    62     return 0;
    63 }
    View Code
  • 相关阅读:
    freemarker 遍历 hashmap 到select option
    三分钟跑起jsblocks
    hibernate_@GeneratedValue
    跑github上的Symfony项目遇到的问题2
    Activiti使用过程_1
    Symfony官方视频教程
    跑github上的Symfony项目遇到的问题
    剧本杀
    随遇而安
    开发者职场心得
  • 原文地址:https://www.cnblogs.com/loveprincess/p/4854479.html
Copyright © 2011-2022 走看看