zoukankan      html  css  js  c++  java
  • poj 3278 Catch That Cow 优化深搜

    这题的思想很简单,就是每次找出队列里面花费时间最少的来走下一步,这样当我们找到k点后,所花费的时间一定是最少的。

    但要用一个标记数组vis[200010],用来标记是否走过。否则会内存溢出。

    #include<queue>
    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int vis[200010];
    struct Point{
        int position,Time;
        Point(int a,int b)
        {
            position=a;Time=b;
            vis[a]=1;
        }
        int operator <(const Point &temp) const
        {
            return Time>temp.Time;
        }
    };
    
    priority_queue<Point> q;
    int bfs(int n,int k)
    {
        while(!q.empty())
            q.pop();
        memset(vis,0,sizeof(vis));
        Point p(n,0);
        q.push(p);
        while(!q.empty())
        {
            p=q.top();
            q.pop();
            if(p.position==k)
                return p.Time;
            if(p.position>k)
            {
                if(!vis[p.position-1])
                    q.push(Point(p.position-1,p.Time+1));
            }
            else
            if(p.position>=0)
            {
                if(p.position)
                if(!vis[p.position-1])
                q.push(Point(p.position-1,p.Time+1));
                if(!vis[p.position+1])
                q.push(Point(p.position+1,p.Time+1));
                if(!vis[p.position*2])
                q.push(Point(p.position*2,p.Time+1));
            }
        }
        return 0;
    }
    int main()
    {
        int n,k,i,j;
        while(scanf("%d%d",&n,&k)!=EOF)
        {
            printf("%d
    ",bfs(n,k));
        }
        return 0;
    }
  • 相关阅读:
    操作系统基础知识与常见问题记录
    String
    Function
    HelloWorld
    替换空格
    二维数组中的查找
    建造者模式(Builder Pattern)
    单例模式(Singleton Pattern)
    工厂方法(Factory Pattern)
    设计模式概述
  • 原文地址:https://www.cnblogs.com/wangfang20/p/3148089.html
Copyright © 2011-2022 走看看