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