优先队列模板

原创 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..

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

dijkstra算法模板(优先队列优化)

dijkstra算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有 向图中最短路径问题。迪杰斯特拉算法主要特点是以起...

C++模板类实现“堆”的经典案例学习+(优先队列)

本文转自:《C++程序设计》   Y. Daniel  Liang著  王刚,刘晓光,刘璟 译, 机械工业出版社              简单介绍堆的概念:堆,实际上就是一颗完全二叉树,它的每个节...

usaco Sweet Butter(迪杰斯特拉(优先队列优化),bellman_ford算法模板)

这题开始用没有优化的迪杰斯特拉喜闻乐见的超时了,然后我用bellmanford算法按理说时间复杂度更大但是书上说往往只要很短的时间就可以求出最短路。 所以我用了这个算法但是我对这个算法还是不熟套了模板...

优先队列(非模板函数,是int)

发现了一个可能是书里的错误,在swim函数中while检测的条件 void priorityQueue::Swim(size_t t) { inArr[0]=inArr[t]; while...

Codeforces 134C Swaps (bfs+优先队列)【模板】

There are n players sitting at a round table. All of them have s cards of n colors in total. Besides...

[hdu1285]拓扑排序模板 邻接表加优先队列简单易懂

确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S...

结构体 的优先队列 【模板】

一批幸福的列车即将从杭州驶向幸福的终点站——温州,身为总列车长的linle有一些奇怪的癖好。 他会记录下全部乘客的名字(name)和他们的人品值(RP),根据这些将他们排序,并不时地从某辆列车里踢出人...

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

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

堆的自行实现和c++优先队列模板

堆分为最小堆和最大堆,堆其实就是一棵特殊的完全二叉树,最小堆得特点是,所有的父节点都比子节点的数值要小,最大堆则就是所有的父节点都比子节点的数值都要大,所以取最小堆(最大堆)的最小值(最大值),都是取...
  • yo_bc
  • yo_bc
  • 2017年03月07日 10:33
  • 116

ACM常用模板——数据结构——优先队列(堆)

数据结构——优先队列(堆)
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:优先队列模板
举报原因:
原因补充:

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