BFS 記錄路徑 bfs 優先順序佇列

2021-10-01 13:55:45 字數 1874 閱讀 4734

bfs+記錄路徑

原題鏈結

找到最短路徑,然後輸出,由於地圖上有怪物,我們還要額外記錄停留的時間。

本題需要用到優先順序佇列,唔,大概意思就是對佇列進行排序,我們需要挑選最小的來計算,確保是最短路徑

關於優先順序佇列可以看這個 優先順序佇列 我在網上找到的我感覺講的很詳細的部落格。

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

struct node};

long

long n,m,temp;

long

long map[

125]

[125];

//地圖同時用-1來標記走過的地圖

long

long vis[

125]

[125];

//記錄走的方向

long

long vis1[

125]

[125];

//記錄每乙個位置停留的時間

long

long mv[4]

[2]=

;long

long

bfs(

)for

(i=0

; i<

4; i++

) e.step=s.step+

1+map[e.x]

[e.y]

;//記錄擊敗怪物所需要的時間

vis[e.x]

[e.y]

=i+1

;//記錄方向

map[e.x]

[e.y]=-

1;q.

push

(e);}}

return-1

;}void

output

(long

long x,

long

long y)

//使用遞迴倒敘輸出

xx=x-mv[vis[x]

[y]-1]

[0];

yy=y-mv[vis[x]

[y]-1]

[1];

output

(xx,yy)

;printf

("%llds:(%lld,%lld)->(%lld,%lld)\n"

,temp,xx,yy,x,y)

; temp++

;while

(vis1[x]

[y]--)}

intmain()

else

if(s[j]

=='x'

)else}}

long

long sum=

bfs();

if(sum==-1

)else

printf

("finish\n");

}return0;

}

優先佇列 BFS

hdu 5433 xiao ming climbing 這題就是優先佇列 bfs 但是一直wa 原因是在搜尋時標記的位置有問題。以前都沒有出現過這種情況 另外就是雖然找過這點的座標 先前到過這個點 但是鬥志值可能不一樣 題目中要求只要不為0就可以,也就是說到這個點的體力消耗可能會不一樣,要取最小的那...

BFS 優先佇列

湘潭大學2018 小明來到乙個由n x m個格仔組成的迷宮,有些格仔是陷阱,用 表示,小明進入陷阱就會死亡,表示沒有陷阱。小明所在的位置用 s 表示,目的地用 t 表示。小明只能向上下左右相鄰的格仔移動,每移動一次花費1秒。有q個單向傳送陣,每個傳送陣各有乙個入口和乙個出口,入口和出口都在迷宮的格仔...

HDU1026 BFS 優先佇列 路徑儲存

剛開始做bfs專題時遇到它,因為路徑儲存放棄了 現在做,剛開始各種wa。後來加了個優先佇列,就ac了。額。include include include include include include include include include include includeusing name...