hdu 1242 优先队列广搜

http://acm.hdu.edu.cn/showproblem.php?pid=1242

 

该题可能有多个 r 点,但只有一个 a 点,所以从 a 开始搜索。因为道路上有两种情况,当步数相同时所耗时间可能不同,而最后要求最短时间,所以应按 时间小 优先而不是 步数少 优先。

#include
#include
#define N 202
using namespace std;
int flag[N][N],n,m,x,y,i,j,ans;
int dir[4][2]={0,1,1,0,0,-1,-1,0};
struct node
{
    friend bool operator<(node a,node b)
    {
        return a.time>b.time;
    }
    int x,y,time;
};
int BFS(int a,int b)
{
    priority_queueq;
    node now,next;
    now.x=x;now.y=y;now.time=0;
    q.push(now);
    while(!q.empty())
    {
        now=q.top();
        q.pop();
        for(i=0;i<4;i++)
        {
            next.x=now.x+dir[i][0];
            next.y=now.y+dir[i][1];
            next.time=now.time+1;
            if(next.x>=0&&next.x=0&&next.y


你可能感兴趣的:(搜索,ACM,BFS,数据结构,优先队列,C++)