題目大體意思就是,求從地圖上的y走到t的最小步數,其中s和r不能走,b要走兩步,e要走一步。
測試輸入:
3 4測試輸出: 8ybeb
eere
sste
0 0
這個題要用優先佇列,不用的話沒有辦法保證所求的步數是最小的。
我也查了一些關於優先佇列的資料,做以下整理:
在優先佇列中,優先順序高的元素先出佇列。
標準庫預設使用元素型別的《操作符來確定它們之間的優先順序關係。
優先佇列的第一種用法,也是最常用的用法:
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...