优先队列模板

原创 2016年08月30日 19:56:58

优先队列走迷宫,并记忆到达时间

#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
#define MAX 999999
using namespace std;
int time,n,m;
int marktime[105][105];
char map[105][105];
int b[4][2]= {0,1,1,0,0,-1,-1,0};
struct node
{
    int i,j,t;
    friend bool operator<(node a,node b)
    {
        return a.t>b.t;
    }
};
int ok(int i,int j)//判断是否时可行点(界内,非墙)
{
    if(i>0&&i<=n&&j>0&j<=m&&map[i][j]!='#')
        return 1;
    else
        return 0;
}
void bfs()
{
    node front,rear;
    front.t=0;
    front.i=1;
    front.j=1;
    priority_queue<node>q;
    q.push(front);
    while(!q.empty())
    {


        front=q.top();
        q.pop();printf("%d %d %d\n",front.i,front.j,front.t);
        for(int i=0; i<4; i++)
        {
            rear.i=front.i+b[i][0];
            rear.j=front.j+b[i][1];
            if(ok(rear.i,rear.j))
            {
                rear.t=front.t+1;
                if(map[rear.i][rear.j]>='0'&&map[rear.i][rear.j]<='9')
                    rear.t=front.t+map[rear.i][rear.j]-48;
                if(marktime[rear.i][rear.j]>=rear.t||marktime[rear.i][rear.j]==-1)
                {
                    marktime[rear.i][rear.j]=rear.t;
                    q.push(rear);
                }
            }
        }
    }
    return;
}
int main()
{
    int i,j,c;
    while(~scanf("%d%d",&n,&m))
    {
        getchar();
        for(i=1; i<=n; i++)
        {
            for(j=1; j<=m; j++)
            {
                scanf("%c",&c);
                map[i][j]=c;
            }
            getchar();
        }
        memset(marktime,-1,sizeof(marktime));
        marktime[1][1]=0;
        bfs();
        printf("%d\n",marktime[n][m]);
    }
}

/**
4 5
.2#3.
.#.2.
2..#.
.#2..

*/
版权声明:本文为博主原创文章,未经博主允许不得转载。

优先队列的使用(模板)

这个是转得网上的,由于不经常使用,偶尔用的时候还经常出错,所以记下来了,经常使用的已经用红色颜色标出来了 : 在优先队列中,优先级高的元素先出队列。 标准库默认使用元素类型的 优先队列的第一种用...
  • u013486414
  • u013486414
  • 2014年11月15日 16:44
  • 804

标准模板库STL中优先队列Priority Queues使用手册

优先队列容器默认使用向量容器实现,用户也可以使用双端队列容器。优先队列总是把优先级最高的元素放在队列的最前方,来保持队列的有序性。 插入操作push()使用一个双变量的布尔函数,将队列中的元素重新排...
  • yuanjilai
  • yuanjilai
  • 2012年10月06日 14:56
  • 10298

C++STL中的标准模板——优先队列

priority_queue在STL内部定义的原型是:       template                      class Sequence=vector ,    ...
  • LilyNothing
  • LilyNothing
  • 2016年02月25日 20:30
  • 568

ACM 模板 c++ STL 队列 queue 优先队列

STL 中优先队列的使用方法(priority_queu)
  • nickwong_
  • nickwong_
  • 2014年09月03日 16:28
  • 956

HDU 1874 (迪杰斯特拉 + 邻接表 + 优先队列 模板)

畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su...
  • L_BestCoder
  • L_BestCoder
  • 2016年07月28日 09:56
  • 527

c++优先队列的基本使用方法

#include #include #include using namespace std; struct node { friend bool operator< (node n1, no...
  • luozhong11
  • luozhong11
  • 2016年07月31日 20:16
  • 590

C++最大堆实现priority_queue优先级队列(算法导论)

max_heapify与build_max_heap过程与heapsort一样 #include #include #include #include using namespace std...
  • WangPegasus
  • WangPegasus
  • 2014年03月11日 22:26
  • 1138

最短路算法(Dijsktra + 优先队列)

模板,对应测试题HDU 2544 #include #include #include #include #include #include #define pb push_back #...
  • joy_go
  • joy_go
  • 2013年09月08日 01:35
  • 1167

优先队列模板

#include #include #include #include using namespace std; //定义比较结构 struct cmp1{ bool operator ()...
  • qaz135135135
  • qaz135135135
  • 2016年07月23日 11:58
  • 218

Dijkstra+堆优化模板 (手写堆简单易懂)

#include #include #define MAXN 2510 #define INF 1000000000 using namespace std; int q[MAXN*2],pos[MA...
  • WhiStLenA
  • WhiStLenA
  • 2016年11月15日 15:45
  • 584
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:优先队列模板
举报原因:
原因补充:

(最多只允许输入30个字)