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
  • 相关阅读:
    年底送书活动:送出6本技术书籍,价值372元!
    (7)ASP.NET WEB服务器控件
    (6)DataTable 转换成 Json
    (9)C#连mysql
    (8)C#连sqlserver
    VM虚拟机
    (7)C#连DB2---oledb方式
    (48)C#网络4 web
    远程桌面
    (47)C#运行时序列化
  • 原文地址:https://www.cnblogs.com/loveprincess/p/4854479.html
Copyright © 2011-2022 走看看