hdu 2822 Dogs 優先佇列

2021-06-05 23:27:42 字數 847 閱讀 7065

起點到終點,』x『處不用時,』 . '用時為1,求到達終點的最小時間。

因為當前狀態的下乙個狀態不能確定,所以如果用普通廣搜的話,必須將整個圖遍歷一遍,但是此題的n*m可能為1000*1000,必定超時。所以考慮用優先佇列。即,每次探查到的點入佇列時,不是直接放到隊尾,放在佇列中合適的位置(此元素前面的元素比它「小」,後面的元素比它「大」),這樣才能保證,首先探查到終點的路徑為所需「最短」路徑。

則迴圈結束的條件為: cur.x==ex&&cur.y==ey。

#include#include#includeusing namespace std;

char map[1010][1010];

int vis[1010][1010];

typedef struct p

; //建構函式,另每個結構中的step初始值為0

const bool operator < (const struct p&p1)const

//此處,p1.stepq;

p next,cur;

cur.x=sx; cur.y=sy;

cur.step=0;

vis[cur.x][cur.y]=1;

while(!q.empty()) q.pop();

q.push(cur);

while (!q.empty())}}

}return -1;

}int main()

scanf("%d%d%d%d",&x0,&y0,&x1,&y1);

printf("%d\n",bfs(x0,y0,x1,y1));

}return 0;

}

hdu 4393 優先佇列)

思路 考慮si最大只有100,所以我們可以建立優先佇列陣列s 1.100 對於每個優先佇列,按第一關鍵字fi第二關鍵字id排序,每次取出所有的優先佇列裡最大值,然後直接 計算 time 1 si fi 找最大的way,將對應的優先佇列pop並輸出對應id即可。1 include2 include3 ...

hdu 4302 優先佇列

進一步學習了優先佇列的用法 題意 乙隻小動物在直線上走,起始位置為零,之後會出現食物,動物要去距離自己最短的食物那,若兩邊的食物距離相等,則選擇之前走的方向的食物 0 x,代表x的位置出現了食物,1代表去吃乙個食物 1 include2 include3 include4 include5 usin...

hdu 4393 優先佇列

用優先佇列儲存每個人的初始距離和編號,每輪求出最快的人,然後pop掉 一開始想遍歷佇列的,後來發現佇列沒辦法遍歷,汗 題意,給幾個第一秒衝出的距離和以後速度,求每秒後最前面人的編號,求完後最前面的退出 2 3100 1 100 2 3 100 51 1 2 23 3 4 13 4 case 1 1 ...