坦克大戰(nyoj284)

2021-06-19 23:29:47 字數 1295 閱讀 8417

題目大體意思就是,求從地圖上的y走到t的最小步數,其中s和r不能走,b要走兩步,e要走一步。

測試輸入:

3 4

ybeb

eere

sste

0 0

測試輸出: 8

這個題要用優先佇列,不用的話沒有辦法保證所求的步數是最小的。

我也查了一些關於優先佇列的資料,做以下整理:

在優先佇列中,優先順序高的元素先出佇列。

標準庫預設使用元素型別的《操作符來確定它們之間的優先順序關係。

優先佇列的第一種用法,也是最常用的用法:

priority_queue

<

int>

qi;通過《操作符可知在整數中元素大的優先順序高。

第二種方法:

在示例1中,如果我們要把元素從小到大輸出怎麼辦呢?

這時我們可以傳入乙個比較函式,使用functional.h函式物件作為比較函式。

priority_queue

<

int, vector

<

int>

, greater

<

int>

>

qi2;

第三種方法:

自定義優先順序,也就是過載《符號

friend

bool operator<

(node n1, node n2)

注意:不要過載》,因為標準庫預設使用元素型別的《操作來確定他們之間的優先順序關係。

#include #include #include #include #define size 350

using namespace std;

struct node

};node start, end;

int m, n;

char map[size][size];

int s[4][2] = , , , };

priority_queueq;//優先佇列

int bfs()

for(i = 0; i < 4; i++)

}//for

}//while

return -1;

}int main (void)

for(i = 0; i < m; i++)

if(map[i][j] == 't')

}//getchar();

} int a = bfs();

printf("%d\n", a);

} return 0;

}

NYOJ284坦克大戰

bfs求最短路,這個題走到 b 點是要花費2個時間,e 是1個時間,所以要用乙個優先佇列,優先順序就是花費小的先出隊,其餘的就是模板了。include include include using namespace std define inf 0x3f3f3f3f int stx,sty int ...

NYOJ 284 坦克大戰(BFS)

好累啊,寫篇部落格歇歇。題目背景很有趣,是大家小時候經常玩的坦克大戰,哈哈。弱弱地表示本人小時候經常玩遊戲機。此題是在迷宮問題的基礎上做了些改動,就是地圖上能走的點可能耗費時間1,也可能耗費時間2。那麼,元素在出佇列時,不能簡單的按照以前的入隊順序出隊了,而應該讓時間最短的先出隊,這樣就能夠保證先入...

nyoj284 坦克大戰 搜尋 bfs

樣例輸入 3 4ybeb eere sste 0 0樣例輸出 8 題意 從y字母的位置到t字母的位置最少trun了幾次 遇到r,s不能走,遇到b的話要turn 2次。坑點在必須用優先佇列,hiphop man 為什麼?真的不知道 不喜歡你的style kkk include include incl...