zyf的現狀 (BFS 優先佇列)

2021-08-01 08:56:10 字數 2163 閱讀 7526

description

zyf對於自己人生的規劃是:健康and快樂。所以他沒有把全部的時間和精力投入到學習中,而是對跑步運動有著狂熱的愛好。經過他的努力,終於加入了運動隊,並且將在下個月代表學校參加省體育聯賽。他所參加的比賽叫做定向越野,是一種新興的運動專案,這項運動的規則(只取其中一種介紹。)是:給定運動員一張地圖(定向越野專用),地圖上有若干個點,並標有位置,包含起點△(以下用『s』表示)、終點◎(以下用『e』表示)、還有一些標有序號(1~n)的點。按照順序 s -> 1 -> 2 -> 3 -> …… -> n -> e 依次經過,最後計算時間。之前說到zyf是乙個追求完美的人,他想要知道某張地圖理論上完賽的最短時間,然後和自己的成績對比,只是他現在忙於訓練,沒時間去計算,你能幫助他,算出這個時間嗎? 

地圖及其移動時間的計算: 

『0』代表平地,移動到平地上需要1個單位的時間; 

『#』代表草地,移動到草地上需要2個單位的時間; 

『t』代表圍牆,移動到圍牆上(含在圍牆上移動),需要4個單位的時間; 

『x』代表禁區,不可到達。 

0 0 # 0 # 0 0 

0 0 # # # # # 

0 0 # 0 0 t t 

0 0 # x x 0 # 

0 0 0 x x 0 # 

0 0 0 # # 0 # 

0 0 # # # # 0 

0 # # t t t # 

# 0 # # 0 0 # 

input

輸入資料的第一行有乙個整數t,表示有t組測試資料。 

隨後是各組測試資料,每組資料保證有解,每組測試資料以「*」結束。 

每組資料有一行,是兩個整數n,m。(1 <= n <= 15,1 <= m <=15)代表地圖的行數和列數。 

接下來有n行m列的字元,代表地圖。 

之後有若干行資料,表示點(兩個或兩個以上的點,最多不超過10個點)。 

每行資料為 c,x,y。代表點c的位置在x行y列。 

output

輸出乙個整數,表示完賽理論上的最短時間。 

每組測試資料輸出一行。 

sample input

2

9 700#0#00

00#####

00#00tt

00#xx0#

000xx0#

000##0#

00####0

0##ttt#

#0##00#

s 1 1

e 9 7

1 4 6

2 2 7

*3 3

0#0#x#

0#0e 1 1

s 3 3

*

sample output

35

6

思路:典型的bfs問題,但是遇到不同障礙物所需要用到的時間是不一致的,因此我們要讓當前花費最小的先出,用到優先佇列,用普通佇列的話求出來的不一定是最小時間。

#include #include using namespace std;

int n, m;

int mp[20][20];

int x[15], y[15];

int dx = ;

int dy = ;

struct node

friend bool operator < (const node &a, const node &b)

};int dis(int sx, int sy, int ex, int ed) ;

priority_queueq;

q.push(node(sx, sy, 0));

vis[sx][sy] = true;

while(!q.empty()) }}

return 0;

}void init()

}int route()

x[++cnt] = ex, y[cnt] = ey;

return cnt;

}int main(void)

cout << ans << endl;

}return 0;

}

優先佇列 BFS

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

BFS 優先佇列

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

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

bfs 記錄路徑 原題鏈結 找到最短路徑,然後輸出,由於地圖上有怪物,我們還要額外記錄停留的時間。本題需要用到優先順序佇列,唔,大概意思就是對佇列進行排序,我們需要挑選最小的來計算,確保是最短路徑 關於優先順序佇列可以看這個 優先順序佇列 我在網上找到的我感覺講的很詳細的部落格。include in...