zoukankan      html  css  js  c++  java
  • poj3278(Catch That Cow)

    题目大意:

        一个农主寻找牛。给出农主的位置n和牛的位置k。农主可以通过n-1或者n+1或者n*2的步伐找牛,问至少多少步才能找到自己的牛。

    解题思路:

        简单的BFS。把农主的每一种可能的步伐通过BFS存到栈中,然后看最少多少步到达K坐标。

    代码:

     1 #include <algorithm>
     2 #include <iostream>
     3 #include <sstream>
     4 #include <cstdlib>
     5 #include <cstring>
     6 #include <cstdio>
     7 #include <string>
     8 #include <bitset>
     9 #include <vector>
    10 #include <queue>
    11 #include <stack>
    12 #include <cmath>
    13 #include <list>
    14 #include <map>
    15 #include <set>
    16 using namespace std;
    17 /***************************************/
    18 #define ll long long
    19 #define int64 __int64
    20 /***************************************/
    21 const int INF = 0x7f7f7f7f;
    22 const double eps = 1e-8;
    23 const double PIE=acos(-1.0);
    24 const int dx[]= {0,-1,0,1};
    25 const int dy[]= {1,0,-1,0};
    26 const int fx[]= {-1,-1,-1,0,0,1,1,1};
    27 const int fy[]= {-1,0,1,-1,1,-1,0,1};
    28 /***************************************/
    29 void openfile()
    30 {
    31     freopen("data.in","rb",stdin);
    32     freopen("data.out","wb",stdout);
    33 }
    34 /**********************华丽丽的分割线,以上为模板部分*****************/
    35 int vis[200009],cnt[200009];//如果你错了,可以开大点数组试试。
    36 int BFS(int n,int k)
    37 {
    38     queue<int >Q;
    39     Q.push(n);
    40     int v;
    41     while(!Q.empty())
    42     {
    43         v=Q.front();
    44         Q.pop();
    45         if (vis[v]==-1)
    46            continue;
    47         vis[v]=-1;
    48         if (v==k)
    49             return cnt[k];
    50         if (v<100005&&v>-2)
    51         {
    52             Q.push(v-1);
    53             if (!cnt[v-1])
    54                 cnt[v-1]=cnt[v]+1;
    55             Q.push(v+1);
    56             if (!cnt[v+1])
    57                 cnt[v+1]=cnt[v]+1;
    58             Q.push(v*2);
    59             if (!cnt[v*2])
    60                 cnt[v*2]=cnt[v]+1;
    61 
    62         }
    63     }
    64     return 0;  //为什么没这句,结果就不对?
    65 }
    66 int main()
    67 {
    68 
    69     int n,k,sum;
    70     while(scanf("%d%d",&n,&k)!=EOF)
    71     {
    72         memset(vis,0,sizeof(vis));
    73         memset(cnt,0,sizeof(cnt));
    74         sum=BFS(n,k);
    75         printf("%d
    ",sum);
    76     }
    77     return 0;
    78 }
    View Code
    屌丝终有逆袭日,*******。
  • 相关阅读:
    枚举类型总结
    正则表达式-Java
    java中Mongo
    cookie
    xsd解析
    水平分表的实现
    c#位运算小例子笔记
    c#设计模式之观察者模式(Observer Pattern)
    c#设计模式之代理模式(Proxy Pattern)
    .Net 数据缓存浅析
  • 原文地址:https://www.cnblogs.com/ZhaoPengkinghold/p/3761116.html
Copyright © 2011-2022 走看看